From 7cd9f03dd48434d81452f4cd10a5a4921ac08d3b Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Thu, 20 Jul 2017 16:29:54 +0700 Subject: [PATCH 01/28] first steps to support min/max --- .../FindExtremumMigration.java | 171 ++++++++++++++++++ .../StreamApiMigrationInspection.java | 3 + .../streamMigration/TerminalBlock.java | 6 +- .../after'MaxReference.java | 32 ++++ .../beforeMaxReference.java | 38 ++++ 5 files changed, 247 insertions(+), 3 deletions(-) create mode 100644 java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/after'MaxReference.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMaxReference.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java new file mode 100644 index 000000000000..122df2605fd8 --- /dev/null +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -0,0 +1,171 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.codeInspection.streamMigration; + +import com.intellij.openapi.project.Project; +import com.intellij.psi.*; +import com.intellij.psi.tree.IElementType; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +import static com.intellij.util.ObjectUtils.tryCast; + +/** + * Created by Roman Ivanov. + */ +public class FindExtremumMigration extends BaseStreamApiMigration { + final private boolean myIsMax; + final private boolean isPrimitive; + final private PsiVariable myCurrentExtremalElement; + final private PsiVariable myCurrentExtremalComparingElement; // TODO naming? + final private PsiExpression myKeySelector; + + protected FindExtremumMigration(boolean shouldWarn, + String replacement, + boolean isMax, + boolean isPrimitive, + PsiVariable currentExtremalElement, + PsiVariable currentExtremalComparingElement, + PsiExpression selector) { + super(shouldWarn, replacement); // TODO min/max? + myIsMax = isMax; + this.isPrimitive = isPrimitive; + myCurrentExtremalElement = currentExtremalElement; + myCurrentExtremalComparingElement = currentExtremalComparingElement; + myKeySelector = selector; + } + + + @Override + PsiElement migrate(@NotNull Project project, @NotNull PsiStatement body, @NotNull TerminalBlock tb) { + PsiStatement statement = tb.getSingleStatement(); + if (statement == null || !(statement instanceof PsiIfStatement)) return null; + PsiIfStatement ifStatement = (PsiIfStatement)statement; + return null; + } + + + static @Nullable + ExtremumTerminal extractExtremumTerminal(@NotNull TerminalBlock tb, @NotNull List variables) { + if (variables.size() == 1) { // possibly collecting extremum in single variable + PsiIfStatement ifStatement = tryCast(tb.getSingleStatement(), PsiIfStatement.class); + if (ifStatement == null) return null; + PsiBinaryExpression binaryExpression = tryCast(ifStatement.getCondition(), PsiBinaryExpression.class); + if (binaryExpression == null) return null; + PsiExpression condition = ifStatement.getCondition(); + PsiExpression lOperand = binaryExpression.getLOperand(); + + //TODO primitive + if (binaryExpression.getOperationSign().getTokenType().equals(JavaTokenType.OROR)) {// maxPerson == null || maxPerson.getAge() < person.getAge() + // stream().max(Comparator.comparingInt(Person::getAge) + if (lOperand instanceof PsiBinaryExpression) { + PsiVariable extremumHolder = extractNullCheckingVar((PsiBinaryExpression)lOperand); + PsiExpression rOperand = binaryExpression.getROperand(); + if(rOperand instanceof PsiBinaryExpression && extremumHolder != null) { + extractComparision((PsiBinaryExpression)rOperand, extremumHolder); + } + } + } + else if (binaryExpression.getOperationSign().getTokenType().equals(JavaTokenType.EQEQ)) { // maxPerson == null, and actual comparision inside if + PsiVariable variable = extractNullCheckingVar(binaryExpression); + } + } + else if (variables.size() == 2) { // intermediate extremum value in separate variable (maxPersonAge) + //TODO + } + else { + return null; + } + return null; + } + + @Nullable + private static ComparisionContext extractComparision(@NotNull PsiBinaryExpression expression, @NotNull PsiVariable extremumHolder) { + IElementType sign = expression.getOperationSign().getTokenType(); + if (sign.equals(JavaTokenType.LT) || sign.equals(JavaTokenType.LE)) { + boolean equalPossible = JavaTokenType.LE.equals(sign); + PsiExpression operand = expression.getROperand(); + if(operand == null) return null; + extractComparisionOriented(expression.getLOperand(), operand, extremumHolder, true, equalPossible); + } + else if (sign.equals(JavaTokenType.GT) || sign.equals(JavaTokenType.GE)) { + + } + return null; + } + + @Nullable + private static ComparisionContext extractComparisionOriented(@NotNull PsiExpression first, + @NotNull PsiExpression second, + @NotNull PsiVariable extremumHolder, + boolean firstLess, + boolean equalsPossible) { + PsiReferenceExpression firstReceiver = resolveReceiver(first); + PsiReferenceExpression secondReceiver = resolveReceiver(second); + + + //EquivalenceChecker equivalence = EquivalenceChecker.getCanonicalPsiEquivalence(); + //EquivalenceChecker.Match match = equivalence.expressionsMatch(first, second); + //PsiVariable variable = tryCast(match.getLeftDiff(), PsiVariable.class); + return null; + } + + private static PsiReferenceExpression resolveReceiver(@NotNull PsiExpression expression) { + PsiMethodCallExpression methodCallExpression = tryCast(expression, PsiMethodCallExpression.class); + PsiExpression qualifierExpression = methodCallExpression.getMethodExpression().getQualifierExpression(); + return tryCast(qualifierExpression, PsiReferenceExpression.class); + } + + @Nullable + private static PsiVariable extractNullCheckingVar(PsiBinaryExpression expression) { + if (!expression.getOperationSign().getTokenType().equals(JavaTokenType.EQEQ)) { + return null; + } + PsiExpression lOperand = expression.getLOperand(); + PsiExpression rOperand = expression.getROperand(); + if (rOperand == null) return null; + + PsiVariable lVariable = extractOrientedNullCheck(lOperand, rOperand); + if (lVariable != null) return lVariable; + PsiVariable rVariable = extractOrientedNullCheck(rOperand, lOperand); + if (rVariable != null) return rVariable; + return null; + } + + @Nullable + private static PsiVariable extractOrientedNullCheck(PsiExpression first, PsiExpression second) { + PsiReferenceExpression lReference = tryCast(first, PsiReferenceExpression.class); + if (lReference != null) { + PsiVariable variable = tryCast(lReference.resolve(), PsiVariable.class); + if (variable != null && second.getText().equals("null")) { + return variable; + } + } + return null; + } + + static class ComparisionContext { + boolean myStrict; + boolean myIsGreater; + PsiExpression myKeySelector; + } + + static class ExtremumTerminal { + + } +} diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java index cb8986867797..d92f35e081ef 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java @@ -466,6 +466,9 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo if (getAccumulatedVariable(tb, nonFinalVariables) != null) { return new SumMigration(true); } + if(FindExtremumMigration.extractExtremumTerminal(tb, nonFinalVariables) != null) { + //TODO + } Collection exitPoints = tb.findExitPoints(controlFlow); if (exitPoints == null) return null; if (exitPoints.isEmpty() && nonFinalVariables.isEmpty()) { diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/TerminalBlock.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/TerminalBlock.java index 4deaada7d342..89d9cb8900ce 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/TerminalBlock.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/TerminalBlock.java @@ -117,9 +117,9 @@ class TerminalBlock { PsiIfStatement ifStatement = (PsiIfStatement)getSingleStatement(); if(ifStatement.getElseBranch() == null && ifStatement.getCondition() != null) { PsiStatement thenBranch = ifStatement.getThenBranch(); - if(thenBranch != null) { - return new TerminalBlock(this, new FilterOp(ifStatement.getCondition(), myVariable, false), myVariable, thenBranch); - } + //if(thenBranch != null) { + // return new TerminalBlock(this, new FilterOp(ifStatement.getCondition(), myVariable, false), myVariable, thenBranch); + //} } } if(myStatements.length >= 1) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/after'MaxReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/after'MaxReference.java new file mode 100644 index 000000000000..11d7ca0948d3 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/after'MaxReference.java @@ -0,0 +1,32 @@ +// "Replace with max()" "false" + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + return personList.stream() + .max(Comparator.comparingInt(Person::getAge)) + .orElse(null); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMaxReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMaxReference.java new file mode 100644 index 000000000000..69d184e4cde6 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMaxReference.java @@ -0,0 +1,38 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person person : personList) { + if (maxPerson == null || maxPerson.getAge() < person.getAge()) { + maxPerson = person; + } + } + return maxPerson; + } +} \ No newline at end of file From 34a29fe6ac696e8da896dbb8a70304bba33bcb72 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Fri, 21 Jul 2017 14:57:10 +0700 Subject: [PATCH 02/28] support simple case without many checks --- .../BaseStreamApiMigration.java | 21 ++ .../FindExtremumMigration.java | 228 ++++++++++++++---- .../StreamApiMigrationInspection.java | 7 +- .../streamMigration/TerminalBlock.java | 14 +- .../streamApiMigration/afterMaxReference.java | 34 +++ .../beforeMaxReference.java | 9 +- 6 files changed, 259 insertions(+), 54 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMaxReference.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java index 0ae365df0b0d..363317b88598 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java @@ -84,6 +84,27 @@ abstract class BaseStreamApiMigration { } } + + static PsiElement replaceWithFindExtremum(PsiLoopStatement loopStatement, + PsiVariable extremumHolder, + String streamText, + PsiType streamResultType) { + PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(loopStatement.getProject()); + restoreComments(loopStatement, loopStatement.getBody()); + InitializerUsageStatus status = ControlFlowUtils.getInitializerUsageStatus(extremumHolder, loopStatement); + if(status == ControlFlowUtils.InitializerUsageStatus.DECLARED_JUST_BEFORE) { // TODO it should be checked before suggesting to prevent NPE + removeLoop(loopStatement); + PsiExpression initializer = extremumHolder.getInitializer(); + if(initializer != null) { + PsiExpression streamExpression = elementFactory.createExpressionFromText(streamText, extremumHolder); // TODO cast expression if needed + return initializer.replace(streamExpression); + } else { + return null; // TODO remove extremum holder and create on this place all + } + } + return null; + } + static void restoreComments(PsiLoopStatement loopStatement, PsiStatement body) { final PsiElement parent = loopStatement.getParent(); for (PsiElement comment : PsiTreeUtil.findChildrenOfType(body, PsiComment.class)) { diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 122df2605fd8..3ed4115ac2da 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -29,61 +29,107 @@ import static com.intellij.util.ObjectUtils.tryCast; * Created by Roman Ivanov. */ public class FindExtremumMigration extends BaseStreamApiMigration { - final private boolean myIsMax; - final private boolean isPrimitive; - final private PsiVariable myCurrentExtremalElement; - final private PsiVariable myCurrentExtremalComparingElement; // TODO naming? - final private PsiExpression myKeySelector; + private final ExtremumTerminal myExtremumTerminal; + + static final String MAX_REPLACEMENT = "max()"; + static final String MIN_REPLACEMENT = "min()"; protected FindExtremumMigration(boolean shouldWarn, String replacement, - boolean isMax, - boolean isPrimitive, - PsiVariable currentExtremalElement, - PsiVariable currentExtremalComparingElement, - PsiExpression selector) { - super(shouldWarn, replacement); // TODO min/max? - myIsMax = isMax; - this.isPrimitive = isPrimitive; - myCurrentExtremalElement = currentExtremalElement; - myCurrentExtremalComparingElement = currentExtremalComparingElement; - myKeySelector = selector; + ExtremumTerminal terminal) { + super(shouldWarn, replacement); + myExtremumTerminal = terminal; } @Override PsiElement migrate(@NotNull Project project, @NotNull PsiStatement body, @NotNull TerminalBlock tb) { - PsiStatement statement = tb.getSingleStatement(); - if (statement == null || !(statement instanceof PsiIfStatement)) return null; - PsiIfStatement ifStatement = (PsiIfStatement)statement; - return null; + String operation = myExtremumTerminal.isMax() ? "max" : "min"; + String comparator; + if(!myExtremumTerminal.myIsPrimitive) { + PsiMember keySelector = myExtremumTerminal.getKeySelector(); + String comparatorLambda = null; + PsiType type = null; + if(keySelector instanceof PsiMethod) { + // TODO how to create method reference properly? + PsiClass containingClass = keySelector.getContainingClass(); + if(containingClass == null) return null; // TODO how it could be? + String classQualifiedName = containingClass.getQualifiedName(); + if(classQualifiedName == null) return null; + comparatorLambda = classQualifiedName + "::" + keySelector.getName(); + PsiType returnType = ((PsiMethod)keySelector).getReturnType(); + if(returnType == null) return null; // TODO maybe check this in extraction and pass as context? + type = returnType; + } else if(keySelector instanceof PsiVariable) { + return null; //TODO + } + if(type == null) return null; // TODO it should never happen + String comparingMethod = getComparingMethod(type); + if(comparingMethod == null) return null; + comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + comparingMethod + "(" + comparatorLambda + ")"; + } else { + comparator = ""; // TODO + } + + String stream = myExtremumTerminal.getTerminalBlock().generate() + "." + operation + "(" + comparator + ").orElse(null)"; // TODO handle primitive + PsiLoopStatement loop = tb.getMainLoop(); + + return replaceWithFindExtremum(loop, myExtremumTerminal.getExtremumHolder(), stream, PsiType.INT); // TODO type? + } + + @Nullable + static private String getComparingMethod(@NotNull PsiType type) { + if(type.equals(PsiType.INT)) return "comparingInt"; + if(type.equals(PsiType.DOUBLE)) return "comparingDouble"; + if(type.equals(PsiType.LONG)) return "comparingLong"; + return null; // TODO more precise handling } static @Nullable ExtremumTerminal extractExtremumTerminal(@NotNull TerminalBlock tb, @NotNull List variables) { + StreamApiMigrationInspection.FilterOp filterOp = tb.getLastOperation(StreamApiMigrationInspection.FilterOp.class); + if(filterOp == null) return null; + tb = tb.withoutLastOperation(); + if(tb == null) return null; + if (variables.size() == 1) { // possibly collecting extremum in single variable - PsiIfStatement ifStatement = tryCast(tb.getSingleStatement(), PsiIfStatement.class); - if (ifStatement == null) return null; - PsiBinaryExpression binaryExpression = tryCast(ifStatement.getCondition(), PsiBinaryExpression.class); + PsiBinaryExpression binaryExpression = tryCast(filterOp.myExpression, PsiBinaryExpression.class); if (binaryExpression == null) return null; - PsiExpression condition = ifStatement.getCondition(); PsiExpression lOperand = binaryExpression.getLOperand(); //TODO primitive - if (binaryExpression.getOperationSign().getTokenType().equals(JavaTokenType.OROR)) {// maxPerson == null || maxPerson.getAge() < person.getAge() + IElementType sign = binaryExpression.getOperationSign().getTokenType(); + if (sign.equals(JavaTokenType.OROR)) {// maxPerson == null || maxPerson.getAge() < person.getAge() // stream().max(Comparator.comparingInt(Person::getAge) if (lOperand instanceof PsiBinaryExpression) { PsiVariable extremumHolder = extractNullCheckingVar((PsiBinaryExpression)lOperand); PsiExpression rOperand = binaryExpression.getROperand(); if(rOperand instanceof PsiBinaryExpression && extremumHolder != null) { - extractComparision((PsiBinaryExpression)rOperand, extremumHolder); + ComparisionContext comparision = extractComparision((PsiBinaryExpression)rOperand, extremumHolder); + if(comparision == null) return null; + PsiAssignmentExpression assignmentExpression = tb.getSingleExpression(PsiAssignmentExpression.class); + if(assignmentExpression == null) return null; + PsiReference reference = assignmentExpression.getLExpression().getReference(); + if(reference == null) return null; + PsiVariable leftVar = tryCast(reference.resolve(), PsiVariable.class); + PsiExpression assigned = assignmentExpression.getRExpression(); + + if(leftVar == null || assigned == null) return null; + //TODO how to compare references? + if(!leftVar.equals(extremumHolder) || !assigned.getText().equals(comparision.getCurrentVariable().getName())) return null; // TODO how to compare + return new ExtremumTerminal(false, comparision.isMax(), comparision.getKeySelector(), comparision.getCurrentVariable(), null, + tb, extremumHolder); } } } - else if (binaryExpression.getOperationSign().getTokenType().equals(JavaTokenType.EQEQ)) { // maxPerson == null, and actual comparision inside if + else if (sign.equals(JavaTokenType.EQEQ)) { // maxPerson == null, and actual comparision inside if PsiVariable variable = extractNullCheckingVar(binaryExpression); } + // Incompatible with long streams with filter ops and so on + //else if(sign.equals(JavaTokenType.GT)) { // TODO maxPerson.getAge() < person.getAge() - before this empty check and use + // + //} } else if (variables.size() == 2) { // intermediate extremum value in separate variable (maxPersonAge) //TODO @@ -97,38 +143,59 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @Nullable private static ComparisionContext extractComparision(@NotNull PsiBinaryExpression expression, @NotNull PsiVariable extremumHolder) { IElementType sign = expression.getOperationSign().getTokenType(); + PsiExpression operand = expression.getROperand(); + if(operand == null) return null; if (sign.equals(JavaTokenType.LT) || sign.equals(JavaTokenType.LE)) { - boolean equalPossible = JavaTokenType.LE.equals(sign); - PsiExpression operand = expression.getROperand(); - if(operand == null) return null; - extractComparisionOriented(expression.getLOperand(), operand, extremumHolder, true, equalPossible); + return extractComparision(expression.getLOperand(), operand, extremumHolder, true); } else if (sign.equals(JavaTokenType.GT) || sign.equals(JavaTokenType.GE)) { - + return extractComparision(expression.getLOperand(), operand, extremumHolder, false); } return null; } + + //TODO inline? @Nullable - private static ComparisionContext extractComparisionOriented(@NotNull PsiExpression first, - @NotNull PsiExpression second, - @NotNull PsiVariable extremumHolder, - boolean firstLess, - boolean equalsPossible) { - PsiReferenceExpression firstReceiver = resolveReceiver(first); - PsiReferenceExpression secondReceiver = resolveReceiver(second); - - + private static ComparisionContext extractComparision(@NotNull PsiExpression first, + @NotNull PsiExpression second, + @NotNull PsiVariable extremumHolder, + boolean firstLess) { + PsiVariable firstReceiver = resolveMethodReceiver(first); // works only for methods + PsiVariable secondReceiver = resolveMethodReceiver(second); + if(firstReceiver == null || secondReceiver == null) return null; + PsiMethod firstMethod = resolveMethod(first); + PsiMethod secondMethod = resolveMethod(first); + if(firstMethod == null || secondMethod == null) return null; + if(!firstMethod.equals(secondMethod)) return null; // TODO is it correct equals? + if(extremumHolder.equals(firstReceiver)) { // TODO is it correct equals? + return new ComparisionContext(firstLess, firstMethod, secondReceiver); + } else if(extremumHolder.equals(secondReceiver)) { + return new ComparisionContext(!firstLess, secondMethod, firstReceiver); + } //EquivalenceChecker equivalence = EquivalenceChecker.getCanonicalPsiEquivalence(); //EquivalenceChecker.Match match = equivalence.expressionsMatch(first, second); //PsiVariable variable = tryCast(match.getLeftDiff(), PsiVariable.class); return null; } - private static PsiReferenceExpression resolveReceiver(@NotNull PsiExpression expression) { + + + @Nullable + private static PsiVariable resolveMethodReceiver(@NotNull PsiExpression expression) { PsiMethodCallExpression methodCallExpression = tryCast(expression, PsiMethodCallExpression.class); PsiExpression qualifierExpression = methodCallExpression.getMethodExpression().getQualifierExpression(); - return tryCast(qualifierExpression, PsiReferenceExpression.class); + PsiReferenceExpression reference = tryCast(qualifierExpression, PsiReferenceExpression.class); + if(reference == null) return null; + return tryCast(reference.resolve(), PsiVariable.class); + } + + @Nullable + private static PsiMethod resolveMethod(@NotNull PsiExpression expression) { + PsiMethodCallExpression methodCallExpression = tryCast(expression, PsiMethodCallExpression.class); + PsiReferenceExpression methodExpression = methodCallExpression.getMethodExpression(); + PsiElement resolvedMethod = methodExpression.resolve(); + return tryCast(resolvedMethod, PsiMethod.class); } @Nullable @@ -160,12 +227,81 @@ public class FindExtremumMigration extends BaseStreamApiMigration { } static class ComparisionContext { - boolean myStrict; - boolean myIsGreater; - PsiExpression myKeySelector; + private final boolean myIsMax; + private final PsiMember myKeySelector; // field or method + private final PsiVariable myCurrentVariable; + + public ComparisionContext(boolean isMax, @NotNull PsiMember keySelector, @NotNull PsiVariable currentVariable) { + myIsMax = isMax; + myKeySelector = keySelector; + myCurrentVariable = currentVariable; + } + + public boolean isMax() { + return myIsMax; + } + + public PsiMember getKeySelector() { + return myKeySelector; + } + + public PsiVariable getCurrentVariable() { + return myCurrentVariable; + } } static class ExtremumTerminal { + private final boolean myIsPrimitive; + private final boolean myIsMax; + private final PsiMember myKeySelector; // field or method + private final PsiVariable myCurrentVariable; + private final PsiExpression myStartingValue; + private final TerminalBlock myTerminalBlock; + private final PsiVariable myExtremumHolder; + + public ExtremumTerminal(boolean isPrimitive, + boolean isMax, + @NotNull PsiMember keySelector, + @NotNull PsiVariable currentVariable, + @Nullable PsiExpression startingValue, + @NotNull TerminalBlock block, + @NotNull PsiVariable extremumHolder) { + myIsPrimitive = isPrimitive; + myIsMax = isMax; + myKeySelector = keySelector; + myCurrentVariable = currentVariable; + myStartingValue = startingValue; + myTerminalBlock = block; + myExtremumHolder = extremumHolder; + } + + public boolean isPrimitive() { + return myIsPrimitive; + } + + public boolean isMax() { + return myIsMax; + } + + public PsiMember getKeySelector() { + return myKeySelector; + } + + public PsiVariable getCurrentVariable() { + return myCurrentVariable; + } + + public PsiExpression getStartingValue() { + return myStartingValue; + } + + public TerminalBlock getTerminalBlock() { + return myTerminalBlock; + } + + public PsiVariable getExtremumHolder() { + return myExtremumHolder; + } } } diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java index d92f35e081ef..5a4fea607469 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java @@ -51,6 +51,8 @@ import java.util.Collection; import java.util.List; import java.util.Objects; +import static com.intellij.codeInspection.streamMigration.FindExtremumMigration.MAX_REPLACEMENT; +import static com.intellij.codeInspection.streamMigration.FindExtremumMigration.MIN_REPLACEMENT; import static com.intellij.util.ObjectUtils.tryCast; import static com.siyeh.ig.psiutils.ControlFlowUtils.InitializerUsageStatus.UNKNOWN; @@ -466,8 +468,9 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo if (getAccumulatedVariable(tb, nonFinalVariables) != null) { return new SumMigration(true); } - if(FindExtremumMigration.extractExtremumTerminal(tb, nonFinalVariables) != null) { - //TODO + FindExtremumMigration.ExtremumTerminal extremumTerminal = FindExtremumMigration.extractExtremumTerminal(tb, nonFinalVariables); + if(extremumTerminal != null) { + return new FindExtremumMigration(true, extremumTerminal.isMax()? MAX_REPLACEMENT : MIN_REPLACEMENT, extremumTerminal); } Collection exitPoints = tb.findExitPoints(controlFlow); if (exitPoints == null) return null; diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/TerminalBlock.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/TerminalBlock.java index 89d9cb8900ce..a19daff331bf 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/TerminalBlock.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/TerminalBlock.java @@ -117,9 +117,9 @@ class TerminalBlock { PsiIfStatement ifStatement = (PsiIfStatement)getSingleStatement(); if(ifStatement.getElseBranch() == null && ifStatement.getCondition() != null) { PsiStatement thenBranch = ifStatement.getThenBranch(); - //if(thenBranch != null) { - // return new TerminalBlock(this, new FilterOp(ifStatement.getCondition(), myVariable, false), myVariable, thenBranch); - //} + if(thenBranch != null) { + return new TerminalBlock(this, new FilterOp(ifStatement.getCondition(), myVariable, false), myVariable, thenBranch); + } } } if(myStatements.length >= 1) { @@ -375,6 +375,14 @@ class TerminalBlock { return myOperations[myOperations.length-1]; } + @Nullable + TerminalBlock withoutLastOperation() { + if(myOperations.length == 0) return null; + Operation[] operations = new Operation[myOperations.length - 1]; + System.arraycopy(myOperations, 0, operations, 0, operations.length); + return new TerminalBlock(operations, myVariable, myStatements); + } + @Nullable T getLastOperation(Class clazz) { return tryCast(getLastOperation(), clazz); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMaxReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMaxReference.java new file mode 100644 index 000000000000..94b3a39d1f41 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMaxReference.java @@ -0,0 +1,34 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMaxReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMaxReference.java index 69d184e4cde6..f5171b03b28c 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMaxReference.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMaxReference.java @@ -28,11 +28,14 @@ public class Main { new Person("Kelly", 12) ); Person maxPerson = null; - for (Person person : personList) { - if (maxPerson == null || maxPerson.getAge() < person.getAge()) { - maxPerson = person; + for (Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null || maxPerson.getAge() < p.getAge()) { + maxPerson = p; + } } } + return maxPerson; } } \ No newline at end of file From 9b9cb9f4237157de31d6c8633b3edcbeb0cc7d5a Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Fri, 21 Jul 2017 18:36:32 +0700 Subject: [PATCH 03/28] extract test cases --- .../{ => allMatch}/afterAllMatch.java | 0 .../{ => allMatch}/afterAllMatchChain.java | 0 .../{ => allMatch}/afterAllMatchContinue.java | 0 .../afterAllMatchMethodRef.java | 0 .../{ => allMatch}/beforeAllMatch.java | 0 .../{ => allMatch}/beforeAllMatchChain.java | 0 .../beforeAllMatchContinue.java | 0 .../beforeAllMatchMethodRef.java | 0 .../{ => anyMatch}/afterAnyMatch.java | 0 .../afterAnyMatchArrayAssignment.java | 0 .../afterAnyMatchAssignment.java | 0 .../afterAnyMatchAssignmentBoolean.java | 0 ...fterAnyMatchAssignmentBooleanInverted.java | 0 .../afterAnyMatchAssignmentExtraCode.java | 0 .../afterAnyMatchAssignmentNonTrivial.java | 0 ...nyMatchAssignmentNonTrivialUnassigned.java | 0 .../afterAnyMatchAssignmentTryCatch.java | 0 .../afterAnyMatchAssignmentTryCatch2.java | 0 .../{ => anyMatch}/afterAnyMatchChain.java | 0 .../afterAnyMatchCompoundAssignment.java | 0 .../afterAnyMatchCustomReturn.java | 0 .../afterAnyMatchEnclosingIf.java | 0 .../afterAnyMatchEnclosingIfBlock.java | 0 .../afterAnyMatchEnclosingIfInterrupted.java | 0 .../{ => anyMatch}/afterAnyMatchExtends.java | 0 .../afterAnyMatchMethodCall.java | 0 .../afterAnyMatchPrimitive.java | 0 .../{ => anyMatch}/afterAnyMatchReturn.java | 0 .../afterAnyMatchUnreachableReturn.java | 0 .../{ => anyMatch}/afterAnyMatchVoid.java | 0 .../{ => anyMatch}/afterNestedAnyMatch.java | 0 .../{ => anyMatch}/beforeAnyMatch.java | 0 .../beforeAnyMatchArrayAssignment.java | 0 .../beforeAnyMatchAssignment.java | 0 .../beforeAnyMatchAssignmentBoolean.java | 0 ...foreAnyMatchAssignmentBooleanInverted.java | 0 .../beforeAnyMatchAssignmentExtraCode.java | 0 .../beforeAnyMatchAssignmentNonTrivial.java | 0 ...nyMatchAssignmentNonTrivialUnassigned.java | 0 .../beforeAnyMatchAssignmentTryCatch.java | 0 .../beforeAnyMatchAssignmentTryCatch2.java | 0 .../{ => anyMatch}/beforeAnyMatchChain.java | 0 .../beforeAnyMatchCompoundAssignment.java | 0 .../beforeAnyMatchCustomReturn.java | 0 .../beforeAnyMatchEnclosingIf.java | 0 .../beforeAnyMatchEnclosingIfBlock.java | 0 .../beforeAnyMatchEnclosingIfInterrupted.java | 0 .../{ => anyMatch}/beforeAnyMatchExtends.java | 0 .../{ => anyMatch}/beforeAnyMatchFloat.java | 0 .../beforeAnyMatchMethodCall.java | 0 .../beforeAnyMatchNonFinal.java | 0 .../beforeAnyMatchPrimitive.java | 0 .../beforeAnyMatchReferNonFinal.java | 0 .../{ => anyMatch}/beforeAnyMatchReturn.java | 0 .../beforeAnyMatchReturnDifferent.java | 0 .../beforeAnyMatchReturnInterrupted.java | 0 .../beforeAnyMatchUnreachableReturn.java | 0 .../{ => anyMatch}/beforeAnyMatchUsesVar.java | 0 .../{ => anyMatch}/beforeAnyMatchVoid.java | 0 .../{ => anyMatch}/beforeNestedAnyMatch.java | 0 .../beforeNestedAnyMatchFailed.java | 0 .../afterBufferedReaderModifiedLine.java | 0 .../afterBufferedReaderSum.java | 0 ...foreBufferedReaderComplexModifiedLine.java | 0 .../beforeBufferedReaderModifiedLine.java | 0 .../beforeBufferedReaderSum.java | 0 .../beforeBufferedReaderSumLineReused.java | 0 .../{ => collect}/afterAddPrimitive.java | 0 .../afterArrayFilterCollect.java | 0 .../afterArrayListVariableType.java | 0 .../afterBufferedReaderCollect.java | 0 .../afterBufferedReaderCollectNestedOk.java | 0 .../{ => collect}/afterCollectAnonymous.java | 0 .../{ => collect}/afterCollectArrayList.java | 0 .../afterCollectArrayListAndFilter.java | 0 .../afterCollectArrayListCollection.java | 0 .../afterCollectArrayListComment.java | 0 ...erCollectArrayListCompoundDeclaration.java | 0 .../afterCollectArrayListLambda.java | 0 ...CollectArrayListNonTrivialInitializer.java | 0 .../{ => collect}/afterCollectBoxed.java | 0 .../{ => collect}/afterCollectCast.java | 0 .../afterCollectContravariant.java | 0 .../afterCollectCustomConstructor.java | 0 .../{ => collect}/afterCollectGuava.java | 0 .../{ => collect}/afterCollectGuavaMap.java | 0 .../{ => collect}/afterCollectGuavaSet.java | 0 .../{ => collect}/afterCollectHashSet.java | 0 .../afterCollectHashSetFieldInitializer.java | 0 .../afterCollectInterrupted.java | 0 .../afterCollectInterruptedInLoop.java | 0 .../afterCollectInterruptedUpdated.java | 0 .../afterCollectInterruptedUsed.java | 0 .../{ => collect}/afterCollectLambda.java | 0 .../afterCollectLinkedHashSet.java | 0 .../afterCollectListSuperType.java | 0 .../{ => collect}/afterCollectNewList.java | 0 .../afterCollectNewListArray.java | 0 .../afterCollectNewListArrayInCall.java | 0 .../afterCollectNewTreeSetArray.java | 0 .../{ => collect}/afterCollectNulls.java | 0 .../afterCollectSelfCollection.java | 0 .../afterCollectSetParameter.java | 0 .../{ => collect}/afterCollectSorted.java | 0 .../afterCollectSortedNatural.java | 0 .../{ => collect}/afterCollectSupertype.java | 0 .../{ => collect}/afterCollectToMap.java | 0 .../{ => collect}/afterCollectToMapPut.java | 0 .../afterCollectToMapPutIfAbsent.java | 0 .../{ => collect}/afterCollectToObj.java | 0 .../afterCollectWithSameLambda.java | 0 .../afterGroupingByArrayList.java | 0 .../afterGroupingByCustomCollection.java | 0 .../afterGroupingByDownstream.java | 0 .../{ => collect}/afterGroupingBySimple.java | 0 .../{ => collect}/afterJoining.java | 0 .../{ => collect}/afterJoiningAssign.java | 0 .../{ => collect}/afterJoiningConcat.java | 0 .../{ => collect}/afterJoiningDelimited.java | 0 .../{ => collect}/afterJoiningInBrackets.java | 0 .../afterJoiningInitialValue.java | 0 .../{ => collect}/afterJoiningReused.java | 0 .../afterJoiningStringBuilderReused.java | 0 .../{ => collect}/afterJoiningUsingIndex.java | 0 .../{ => collect}/afterWildcardCollect.java | 0 .../{ => collect}/beforeAddPrimitive.java | 0 .../beforeArrayFilterCollect.java | 0 .../beforeArrayListVariableType.java | 0 .../beforeBufferedReaderCollect.java | 0 .../beforeBufferedReaderCollectNested.java | 0 .../beforeBufferedReaderCollectNestedOk.java | 0 .../{ => collect}/beforeCollectAnonymous.java | 0 .../{ => collect}/beforeCollectArrayList.java | 0 .../beforeCollectArrayListAndFilter.java | 0 .../beforeCollectArrayListCollection.java | 0 .../beforeCollectArrayListComment.java | 0 ...reCollectArrayListCompoundDeclaration.java | 0 .../beforeCollectArrayListLambda.java | 0 ...CollectArrayListNonTrivialInitializer.java | 0 .../{ => collect}/beforeCollectBoxed.java | 0 .../{ => collect}/beforeCollectCast.java | 0 .../beforeCollectContravariant.java | 0 .../beforeCollectCustomConstructor.java | 0 .../{ => collect}/beforeCollectGuava.java | 0 .../{ => collect}/beforeCollectGuavaMap.java | 0 .../beforeCollectGuavaNonEmpty.java | 0 .../{ => collect}/beforeCollectGuavaSet.java | 0 .../{ => collect}/beforeCollectHashSet.java | 0 .../beforeCollectHashSetFieldInitializer.java | 0 .../beforeCollectIdentityMap.java | 0 .../beforeCollectInterrupted.java | 0 .../beforeCollectInterruptedInLoop.java | 0 .../beforeCollectInterruptedUpdated.java | 0 .../beforeCollectInterruptedUsed.java | 0 .../beforeCollectInterruptedUsedFinal.java | 0 .../{ => collect}/beforeCollectLambda.java | 0 .../beforeCollectLinkedHashSet.java | 0 .../beforeCollectListSuperType.java | 0 .../{ => collect}/beforeCollectNewList.java | 0 .../beforeCollectNewListArray.java | 0 .../beforeCollectNewListArrayInCall.java | 0 .../beforeCollectNewTreeSetArray.java | 0 .../{ => collect}/beforeCollectNulls.java | 0 ...ollectQualifierDependsOnLoopParameter.java | 0 .../beforeCollectSelfCollection.java | 0 .../beforeCollectSetParameter.java | 0 .../{ => collect}/beforeCollectSorted.java | 0 .../beforeCollectSortedNatural.java | 0 .../{ => collect}/beforeCollectSupertype.java | 0 .../{ => collect}/beforeCollectToMap.java | 0 .../{ => collect}/beforeCollectToMapPut.java | 0 .../beforeCollectToMapPutIfAbsent.java | 0 .../beforeCollectToMapPutInvalid.java | 0 .../{ => collect}/beforeCollectToObj.java | 0 .../beforeCollectWithAnonymous.java | 0 .../beforeCollectWithLambda.java | 0 .../beforeCollectWithSameLambda.java | 0 .../beforeGroupingByArrayList.java | 0 .../beforeGroupingByCustomCollection.java | 0 .../beforeGroupingByDownstream.java | 0 .../{ => collect}/beforeGroupingBySimple.java | 0 .../{ => collect}/beforeJoining.java | 0 .../{ => collect}/beforeJoiningAssign.java | 0 .../{ => collect}/beforeJoiningConcat.java | 0 .../{ => collect}/beforeJoiningDelimited.java | 0 .../beforeJoiningDelimitedWrongBuilder.java | 0 .../beforeJoiningInBrackets.java | 0 .../beforeJoiningInitialValue.java | 0 .../{ => collect}/beforeJoiningReused.java | 0 .../beforeJoiningStringBuilderReused.java | 0 .../beforeJoiningUsingIndex.java | 0 .../{ => collect}/beforeWildcardCollect.java | 0 .../afterCollectionsAddAllArray.java | 0 .../afterCollectionsAddAllPrimitive.java | 0 .../afterCollectionsAddAllVarArg.java | 0 .../beforeCollectionsAddAllArray.java | 0 .../beforeCollectionsAddAllPrimitive.java | 0 .../beforeCollectionsAddAllVarArg.java | 0 .../beforeCollectionsAddAllWrongLimit.java | 0 .../{ => continue}/afterContinue.java | 0 .../{ => continue}/afterContinueNegate.java | 0 .../afterContinueNegateFloat.java | 0 .../{ => continue}/afterContinueNested.java | 0 .../afterContinueNestedElse.java | 0 .../{ => continue}/afterContinueOr.java | 0 .../{ => continue}/beforeContinue.java | 0 .../{ => continue}/beforeContinueInside.java | 0 .../{ => continue}/beforeContinueNegate.java | 0 .../beforeContinueNegateFloat.java | 0 .../{ => continue}/beforeContinueNested.java | 0 .../beforeContinueNestedElse.java | 0 .../beforeContinueNestedLabel.java | 0 .../{ => continue}/beforeContinueOr.java | 0 .../{ => count}/afterCountArray.java | 0 .../{ => count}/afterCountInner.java | 0 .../{ => count}/afterCountOuter.java | 0 .../{ => count}/afterCountPrimitiveArray.java | 0 .../{ => count}/beforeCountArray.java | 0 .../{ => count}/beforeCountInner.java | 0 .../{ => count}/beforeCountOuter.java | 0 .../beforeCountPrimitiveArray.java | 0 .../{ => count}/beforeCountShortArray.java | 0 .../{ => distinct}/afterDistinctCollect.java | 0 .../afterDistinctCollectLimit.java | 0 .../{ => distinct}/beforeDistinctCollect.java | 0 .../beforeDistinctCollectLimit.java | 0 .../beforeDistinctCollectWrongItem.java | 0 .../afterCollectionDependencyInFilter.java | 0 .../afterCollectionDependencyInFilter1.java | 0 .../afterCollectionDependencyInFilter2.java | 0 .../afterCollectionDependencyInFilter3.java | 0 .../afterCollectionDependencyInFilter4.java | 0 ...lterFlatMapCollectionFilterMapCollect.java | 0 .../afterFilterFlatMapMapFilterCollect.java | 0 .../afterFilterMapFlatMapArrayCollect.java | 0 .../afterFilterMapFlatMapArrayMapCollect.java | 0 .../{ => filter}/afterFilterMapForEach.java | 0 .../{ => filter}/afterFilterNoBraces.java | 0 .../afterNormalNestedFilters.java | 0 .../beforeCollectionDependencyInFilter.java | 0 .../beforeCollectionDependencyInFilter1.java | 0 .../beforeCollectionDependencyInFilter2.java | 0 .../beforeCollectionDependencyInFilter3.java | 0 .../beforeCollectionDependencyInFilter4.java | 0 ...lterFlatMapCollectionFilterMapCollect.java | 0 .../beforeFilterFlatMapMapFilterCollect.java | 0 .../beforeFilterMapFlatMapArrayCollect.java | 0 ...beforeFilterMapFlatMapArrayMapCollect.java | 0 .../{ => filter}/beforeFilterMapForEach.java | 0 .../{ => filter}/beforeFilterNoBraces.java | 0 .../beforeNormalNestedFilters.java | 0 .../{ => findFirst}/afterFindFirst.java | 0 .../{ => findFirst}/afterFindFirstArray.java | 0 .../afterFindFirstAssignment.java | 0 .../afterFindFirstAssignmentCast.java | 0 .../afterFindFirstAssignmentIntermediate.java | 0 .../afterFindFirstAssignmentInterrupted.java | 0 .../afterFindFirstAssignmentPrimitive.java | 0 ...dFirstAssignmentUsedInSameDeclaration.java | 0 .../afterFindFirstAssignmentWithLabel.java | 0 .../afterFindFirstBoolean.java | 0 .../{ => findFirst}/afterFindFirstCast.java | 0 .../{ => findFirst}/afterFindFirstEnum.java | 0 .../{ => findFirst}/afterFindFirstField.java | 0 .../afterFindFirstIfPresent.java | 0 .../afterFindFirstIfPresentWithReturn.java | 0 .../afterFindFirstOptional.java | 0 .../afterFindFirstOptionalFlatMap.java | 0 .../afterFindFirstOptionalType.java | 0 .../afterFindFirstOuterIf.java | 0 .../afterFindFirstPrimitive.java | 0 .../afterFindFirstReAssignment.java | 0 .../{ => findFirst}/afterFindFirstReturn.java | 0 .../afterFindFirstReturnUnreachable.java | 0 .../afterFindFirstRunnableTernary.java | 0 .../afterFindFirstStaticField.java | 0 .../afterFindFirstTernary.java | 0 .../afterFindFirstValueReused.java | 0 .../{ => findFirst}/beforeFindFirst.java | 0 .../{ => findFirst}/beforeFindFirstArray.java | 0 .../beforeFindFirstAssignment.java | 0 .../beforeFindFirstAssignmentCast.java | 0 ...beforeFindFirstAssignmentIntermediate.java | 0 .../beforeFindFirstAssignmentInterrupted.java | 0 .../beforeFindFirstAssignmentNested.java | 0 .../beforeFindFirstAssignmentPrimitive.java | 0 ...beforeFindFirstAssignmentPrimitiveMap.java | 0 ...dFirstAssignmentUsedInSameDeclaration.java | 0 .../beforeFindFirstAssignmentWithLabel.java | 0 .../beforeFindFirstBoolean.java | 0 .../{ => findFirst}/beforeFindFirstCall.java | 0 .../{ => findFirst}/beforeFindFirstCast.java | 0 .../{ => findFirst}/beforeFindFirstEnum.java | 0 .../{ => findFirst}/beforeFindFirstField.java | 0 .../beforeFindFirstFieldOther.java | 0 .../beforeFindFirstIfPresent.java | 0 ...beforeFindFirstIfPresentTwoStatements.java | 0 .../beforeFindFirstIfPresentWithReturn.java | 0 .../beforeFindFirstOptional.java | 0 .../beforeFindFirstOptionalFlatMap.java | 0 .../beforeFindFirstOptionalType.java | 0 .../beforeFindFirstOuterIf.java | 0 .../beforeFindFirstPrimitive.java | 0 .../beforeFindFirstPrimitiveNonTrivial.java | 0 .../beforeFindFirstReAssignment.java | 0 .../beforeFindFirstReturn.java | 0 .../beforeFindFirstReturnUnreachable.java | 0 .../beforeFindFirstRunnableTernary.java | 0 .../beforeFindFirstStaticField.java | 0 .../beforeFindFirstTernary.java | 0 .../beforeFindFirstUsedInBound.java | 0 .../beforeFindFirstValueReused.java | 0 .../afterFlatMapChangePrimitiveType.java | 0 .../{ => flatMap}/afterFlatMapForLoop.java | 0 .../{ => flatMap}/afterFlatten2DArray.java | 0 .../afterFlatten2DArrayPrimitive.java | 0 .../beforeFlatMapChangePrimitiveType.java | 0 .../{ => flatMap}/beforeFlatMapForLoop.java | 0 .../{ => flatMap}/beforeFlatten2DArray.java | 0 .../beforeFlatten2DArrayPrimitive.java | 0 .../{ => foreach}/afterForEachCast.java | 0 .../{ => foreach}/afterForeachMethodRef.java | 0 .../{ => foreach}/beforeForEachCast.java | 0 .../{ => foreach}/beforeForeachMethodRef.java | 0 .../{ => limit}/afterLimitCollect.java | 0 .../afterLimitCollectAddedOps.java | 0 .../afterLimitCollectInNestedLoop.java | 0 .../{ => limit}/afterLimitCount.java | 0 .../{ => limit}/afterLimitCountGreater.java | 0 .../{ => limit}/afterLimitCountPostfix.java | 0 .../{ => limit}/afterLimitCountPrefix.java | 0 .../{ => limit}/afterLimitFind.java | 0 .../{ => limit}/afterLimitIntermediate.java | 0 .../{ => limit}/afterRangeLimited.java | 0 .../{ => limit}/beforeLimitCollect.java | 0 .../beforeLimitCollectAddedOps.java | 0 .../beforeLimitCollectInNestedLoop.java | 0 .../beforeLimitCollectInOuterLoop.java | 0 .../{ => limit}/beforeLimitCollectSet.java | 0 .../beforeLimitCollectWrongCollection.java | 0 .../{ => limit}/beforeLimitCount.java | 0 .../{ => limit}/beforeLimitCountGreater.java | 0 .../{ => limit}/beforeLimitCountPostfix.java | 0 .../{ => limit}/beforeLimitCountPrefix.java | 0 .../{ => limit}/beforeLimitCountRef.java | 0 .../{ => limit}/beforeLimitFind.java | 0 .../{ => limit}/beforeLimitIntermediate.java | 0 .../{ => limit}/beforeRangeLimited.java | 0 .../{ => minMax}/afterMaxReference.java | 0 .../afterMinReference.java} | 12 +++-- .../{ => minMax}/beforeMaxReference.java | 0 .../minMax/beforeMinReference.java | 41 ++++++++++++++ .../{ => noneMatch}/afterNoneMatch.java | 0 .../afterNoneMatchContinue.java | 0 .../{ => noneMatch}/beforeNoneMatch.java | 0 .../beforeNoneMatchContinue.java | 0 .../{ => other}/afterCastExpected.java | 0 .../{ => other}/afterCastInIterValue.java | 0 .../afterCompactFilterToMethodReference.java | 0 .../afterComputeIfAbsentChained.java | 0 .../afterComputeIfAbsentSimple.java | 0 .../{ => other}/afterDisableForArrays.java | 0 .../{ => other}/afterExplicitArray.java | 0 .../{ => other}/afterForLoop.java | 0 .../{ => other}/afterForLoopBoxed.java | 0 .../{ => other}/afterForLoopShortBound.java | 0 .../{ => other}/afterFromAsList.java | 0 .../{ => other}/afterFromEmptyList.java | 0 .../{ => other}/afterIncompleteNewCall.java | 0 .../{ => other}/afterMethodRef.java | 0 .../{ => other}/afterMissedBraces.java | 0 .../{ => other}/afterNormal.java | 0 .../{ => other}/afterNormalComments.java | 0 .../{ => other}/afterNormalNoBraces.java | 0 .../{ => other}/afterPrimitive.java | 0 .../{ => other}/afterPrimitiveArray.java | 0 .../{ => other}/afterTooLazyCalculation.java | 0 .../{ => other}/beforeBreakInside.java | 0 .../{ => other}/beforeCastExpected.java | 0 .../{ => other}/beforeCastInIterValue.java | 0 .../beforeCompactFilterToMethodReference.java | 0 .../beforeComputeIfAbsentChained.java | 0 .../beforeComputeIfAbsentSimple.java | 0 .../{ => other}/beforeDisableForArrays.java | 0 .../{ => other}/beforeExceptionIsThrown.java | 0 .../{ => other}/beforeExplicitArray.java | 0 .../{ => other}/beforeForLoop.java | 0 .../{ => other}/beforeForLoopBoxed.java | 0 .../{ => other}/beforeForLoopFloatBound.java | 0 .../{ => other}/beforeForLoopShortBound.java | 0 .../{ => other}/beforeForLoopUpdated.java | 0 .../{ => other}/beforeForLoopWrongBound.java | 0 .../beforeForLoopWrongIncrement.java | 0 .../beforeForLoopWrongInitializer.java | 0 .../{ => other}/beforeFromAsList.java | 0 .../{ => other}/beforeFromEmptyList.java | 0 .../{ => other}/beforeIfIncomplete.java | 0 .../{ => other}/beforeIncompleteLabel.java | 0 .../{ => other}/beforeIncompleteNewCall.java | 0 .../{ => other}/beforeIterable.java | 0 ...InitializedAndThusNotEffectivelyFinal.java | 0 .../{ => other}/beforeMethodRef.java | 0 .../{ => other}/beforeMissedBraces.java | 0 .../{ => other}/beforeNoFilter.java | 0 .../{ => other}/beforeNormal.java | 0 .../{ => other}/beforeNormalComments.java | 0 .../{ => other}/beforeNormalNoBraces.java | 0 .../beforeNotEffectivelyFinalVar.java | 0 .../{ => other}/beforePrimitive.java | 0 .../{ => other}/beforePrimitiveArray.java | 0 .../beforePrimitiveArrayWrongType.java | 0 .../{ => other}/beforeRangeReassigned.java | 0 .../beforeRangeReassignedNested.java | 0 .../{ => other}/beforeRawCollection.java | 0 .../beforeRawCollectionSubstitution.java | 0 .../{ => other}/beforeReturnInside.java | 0 .../{ => other}/beforeThrownCollect.java | 0 .../beforeThrownExceptionsNotMatched.java | 0 .../{ => other}/beforeTooLazyCalculation.java | 0 .../{ => reduce}/afterAnd.java | 0 .../{ => reduce}/afterAndHighestBit.java | 0 .../afterAndReplacingHexInitializer.java | 0 .../afterAndReplacingInitializer.java | 0 .../afterAndReplacingLongInitializer.java | 0 .../{ => reduce}/afterConjunction.java | 0 .../{ => reduce}/afterConjunctionBoxed.java | 0 .../{ => reduce}/afterDisjunction.java | 0 .../{ => reduce}/afterMultiply.java | 0 .../afterMultiplyComplexInitializer.java | 0 .../afterMultiplyConflictingVariable.java | 0 ...afterMultiplyNarrowingTypeInitializer.java | 0 .../afterMultiplyNotOneInitializer.java | 0 .../afterMultiplyWithMapping.java | 0 .../{ => reduce}/afterOr.java | 0 .../{ => reduce}/afterXor.java | 0 .../{ => reduce}/afterXorLong.java | 0 .../{ => reduce}/beforeAnd.java | 0 .../{ => reduce}/beforeAndHighestBit.java | 0 .../beforeAndReplacingHexInitializer.java | 0 .../beforeAndReplacingInitializer.java | 0 .../beforeAndReplacingLongInitializer.java | 0 .../{ => reduce}/beforeConjunction.java | 0 .../{ => reduce}/beforeConjunctionBoxed.java | 0 .../{ => reduce}/beforeDisjunction.java | 0 .../{ => reduce}/beforeMultiply.java | 0 .../beforeMultiplyComplexInitializer.java | 0 .../beforeMultiplyConflictingVariable.java | 0 ...eforeMultiplyNarrowingTypeInitializer.java | 0 .../beforeMultiplyNotOneInitializer.java | 0 .../beforeMultiplyWithMapping.java | 0 .../{ => reduce}/beforeOr.java | 0 .../{ => reduce}/beforeXor.java | 0 .../{ => reduce}/beforeXorLong.java | 0 .../{ => sorted}/afterSortedToArray.java | 0 .../{ => sorted}/beforeSortedToArray.java | 0 .../{ => sum}/afterIntArraySum.java | 0 .../{ => sum}/afterIntFilterSum.java | 0 .../{ => sum}/afterIntSum.java | 0 .../{ => sum}/afterIntegerSum.java | 0 .../{ => sum}/afterSumArrayLength.java | 0 .../{ => sum}/afterSumArrayLengthNested.java | 0 .../{ => sum}/afterSumCollection.java | 0 .../{ => sum}/afterSumInterruptedUnused.java | 0 .../{ => sum}/afterSumInterruptedUsed.java | 0 .../{ => sum}/afterSumNarrowing.java | 0 .../{ => sum}/afterSumNarrowingParens.java | 0 .../{ => sum}/afterSumPrimitive.java | 0 .../{ => sum}/afterSumPromotion.java | 0 .../{ => sum}/beforeFloatSum.java | 0 .../{ => sum}/beforeIntArraySum.java | 0 .../{ => sum}/beforeIntFilterSum.java | 0 .../{ => sum}/beforeIntSum.java | 0 .../{ => sum}/beforeIntegerSum.java | 0 .../{ => sum}/beforeSumAccessOuterFor.java | 0 .../{ => sum}/beforeSumArrayLength.java | 0 .../{ => sum}/beforeSumArrayLengthFloat.java | 0 .../{ => sum}/beforeSumArrayLengthNested.java | 0 .../{ => sum}/beforeSumCollection.java | 0 .../{ => sum}/beforeSumInterruptedUnused.java | 0 .../{ => sum}/beforeSumInterruptedUsed.java | 0 .../{ => sum}/beforeSumNarrowing.java | 0 .../{ => sum}/beforeSumNarrowingParens.java | 0 .../{ => sum}/beforeSumPrimitive.java | 0 .../{ => sum}/beforeSumPromotion.java | 0 .../{ => takeWhile}/afterTakeWhileJava9.java | 0 .../{ => takeWhile}/beforeTakeWhile.java | 0 .../{ => takeWhile}/beforeTakeWhileJava9.java | 0 .../{ => toArray}/afterToArray.java | 0 .../{ => toArray}/afterToArrayAssignment.java | 0 .../{ => toArray}/afterToArrayCounted.java | 0 .../afterToArrayCountedBoxed.java | 0 .../afterToArrayCountedLength2D.java | 0 .../afterToArrayCountedLengthGeneric.java | 0 .../afterToArrayDeclaration.java | 0 .../{ => toArray}/afterToArrayGeneric.java | 0 .../{ => toArray}/afterToArrayHashSet.java | 0 .../afterToArrayLinkedHashSet.java | 0 .../afterToArrayReusedCollection.java | 0 .../{ => toArray}/afterToArraySorted.java | 0 .../{ => toArray}/afterToArrayTreeSet.java | 0 .../afterToArrayTwoDimensional.java | 0 .../{ => toArray}/beforeToArray.java | 0 .../beforeToArrayAssignment.java | 0 .../{ => toArray}/beforeToArrayCounted.java | 0 .../beforeToArrayCountedBoxed.java | 0 .../beforeToArrayCountedLength2D.java | 0 .../beforeToArrayCountedLengthGeneric.java | 0 .../beforeToArrayDeclaration.java | 0 ...eforeToArrayDeclarationCollectionUsed.java | 0 .../{ => toArray}/beforeToArrayGeneric.java | 0 .../{ => toArray}/beforeToArrayHashSet.java | 0 .../beforeToArrayIdentityHashSet.java | 0 .../beforeToArrayLinkedHashSet.java | 0 .../beforeToArrayReusedCollection.java | 0 .../{ => toArray}/beforeToArraySorted.java | 0 .../{ => toArray}/beforeToArrayTreeSet.java | 0 .../beforeToArrayTwoDimensional.java | 0 .../{ => toArray}/beforeToArrayWrongSize.java | 0 .../StreamApiMigrationInspectionTest.java | 53 ++++++++++--------- .../AllMatchStreamApiMigrationTest.java | 27 ++++++++++ .../AnyMatchStreamApiMigrationTest.java | 27 ++++++++++ .../BufferedReaderStreamApiMigrationTest.java | 27 ++++++++++ .../CollectStreamApiMigrationTest.java | 27 ++++++++++ .../CollectionsStreamApiMigrationTest.java | 27 ++++++++++ .../ContinueStreamApiMigrationTest.java | 27 ++++++++++ .../DistinctStreamApiMigrationTest.java | 27 ++++++++++ .../streams/FilterStreamApiMigrationTest.java | 27 ++++++++++ .../FindFirstStreamApiMigrationTest.java | 27 ++++++++++ .../FlatMapFirstStreamApiMigrationTest.java | 27 ++++++++++ .../ForeachFirstStreamApiMigrationTest.java | 27 ++++++++++ .../streams/LimitStreamApiMigrationTest.java | 27 ++++++++++ .../streams/MinMaxStreamApiMigrationTest.java | 27 ++++++++++ .../NoneMatchStreamApiMigrationTest.java | 27 ++++++++++ .../streams/OtherStreamApiMigrationTest.java | 27 ++++++++++ ...uctionOperationStreamApiMigrationTest.java | 27 ++++++++++ ...SortedOperationStreamApiMigrationTest.java | 27 ++++++++++ .../StreamApiMigrationInspectionBaseTest.java | 51 ++++++++++++++++++ .../SumOperationStreamApiMigrationTest.java | 27 ++++++++++ ...eWhileOperationStreamApiMigrationTest.java | 27 ++++++++++ ...oArrayOperationStreamApiMigrationTest.java | 27 ++++++++++ 540 files changed, 666 insertions(+), 31 deletions(-) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => allMatch}/afterAllMatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => allMatch}/afterAllMatchChain.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => allMatch}/afterAllMatchContinue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => allMatch}/afterAllMatchMethodRef.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => allMatch}/beforeAllMatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => allMatch}/beforeAllMatchChain.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => allMatch}/beforeAllMatchContinue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => allMatch}/beforeAllMatchMethodRef.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchArrayAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchAssignmentBoolean.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchAssignmentBooleanInverted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchAssignmentExtraCode.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchAssignmentNonTrivial.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchAssignmentNonTrivialUnassigned.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchAssignmentTryCatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchAssignmentTryCatch2.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchChain.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchCompoundAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchCustomReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchEnclosingIf.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchEnclosingIfBlock.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchEnclosingIfInterrupted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchExtends.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchMethodCall.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchUnreachableReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchVoid.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterNestedAnyMatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchArrayAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchAssignmentBoolean.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchAssignmentBooleanInverted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchAssignmentExtraCode.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchAssignmentNonTrivial.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchAssignmentNonTrivialUnassigned.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchAssignmentTryCatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchAssignmentTryCatch2.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchChain.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchCompoundAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchCustomReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchEnclosingIf.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchEnclosingIfBlock.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchEnclosingIfInterrupted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchExtends.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchFloat.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchMethodCall.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchNonFinal.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchReferNonFinal.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchReturnDifferent.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchReturnInterrupted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchUnreachableReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchUsesVar.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchVoid.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeNestedAnyMatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeNestedAnyMatchFailed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => bufferedReader}/afterBufferedReaderModifiedLine.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => bufferedReader}/afterBufferedReaderSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => bufferedReader}/beforeBufferedReaderComplexModifiedLine.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => bufferedReader}/beforeBufferedReaderModifiedLine.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => bufferedReader}/beforeBufferedReaderSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => bufferedReader}/beforeBufferedReaderSumLineReused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterAddPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterArrayFilterCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterArrayListVariableType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterBufferedReaderCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterBufferedReaderCollectNestedOk.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectAnonymous.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectArrayList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectArrayListAndFilter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectArrayListCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectArrayListComment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectArrayListCompoundDeclaration.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectArrayListLambda.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectArrayListNonTrivialInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectCast.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectContravariant.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectCustomConstructor.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectGuava.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectGuavaMap.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectGuavaSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectHashSetFieldInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectInterrupted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectInterruptedInLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectInterruptedUpdated.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectInterruptedUsed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectLambda.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectLinkedHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectListSuperType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectNewList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectNewListArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectNewListArrayInCall.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectNewTreeSetArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectNulls.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectSelfCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectSetParameter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectSorted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectSortedNatural.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectSupertype.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectToMap.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectToMapPut.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectToMapPutIfAbsent.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectToObj.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectWithSameLambda.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterGroupingByArrayList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterGroupingByCustomCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterGroupingByDownstream.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterGroupingBySimple.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoining.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoiningAssign.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoiningConcat.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoiningDelimited.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoiningInBrackets.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoiningInitialValue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoiningReused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoiningStringBuilderReused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoiningUsingIndex.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterWildcardCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeAddPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeArrayFilterCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeArrayListVariableType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeBufferedReaderCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeBufferedReaderCollectNested.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeBufferedReaderCollectNestedOk.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectAnonymous.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectArrayList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectArrayListAndFilter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectArrayListCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectArrayListComment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectArrayListCompoundDeclaration.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectArrayListLambda.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectArrayListNonTrivialInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectCast.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectContravariant.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectCustomConstructor.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectGuava.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectGuavaMap.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectGuavaNonEmpty.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectGuavaSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectHashSetFieldInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectIdentityMap.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectInterrupted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectInterruptedInLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectInterruptedUpdated.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectInterruptedUsed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectInterruptedUsedFinal.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectLambda.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectLinkedHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectListSuperType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectNewList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectNewListArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectNewListArrayInCall.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectNewTreeSetArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectNulls.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectQualifierDependsOnLoopParameter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectSelfCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectSetParameter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectSorted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectSortedNatural.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectSupertype.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectToMap.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectToMapPut.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectToMapPutIfAbsent.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectToMapPutInvalid.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectToObj.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectWithAnonymous.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectWithLambda.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectWithSameLambda.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeGroupingByArrayList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeGroupingByCustomCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeGroupingByDownstream.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeGroupingBySimple.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoining.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningAssign.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningConcat.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningDelimited.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningDelimitedWrongBuilder.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningInBrackets.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningInitialValue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningReused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningStringBuilderReused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningUsingIndex.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeWildcardCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collections}/afterCollectionsAddAllArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collections}/afterCollectionsAddAllPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collections}/afterCollectionsAddAllVarArg.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collections}/beforeCollectionsAddAllArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collections}/beforeCollectionsAddAllPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collections}/beforeCollectionsAddAllVarArg.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collections}/beforeCollectionsAddAllWrongLimit.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/afterContinue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/afterContinueNegate.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/afterContinueNegateFloat.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/afterContinueNested.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/afterContinueNestedElse.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/afterContinueOr.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/beforeContinue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/beforeContinueInside.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/beforeContinueNegate.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/beforeContinueNegateFloat.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/beforeContinueNested.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/beforeContinueNestedElse.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/beforeContinueNestedLabel.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/beforeContinueOr.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/afterCountArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/afterCountInner.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/afterCountOuter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/afterCountPrimitiveArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/beforeCountArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/beforeCountInner.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/beforeCountOuter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/beforeCountPrimitiveArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/beforeCountShortArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => distinct}/afterDistinctCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => distinct}/afterDistinctCollectLimit.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => distinct}/beforeDistinctCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => distinct}/beforeDistinctCollectLimit.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => distinct}/beforeDistinctCollectWrongItem.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterCollectionDependencyInFilter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterCollectionDependencyInFilter1.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterCollectionDependencyInFilter2.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterCollectionDependencyInFilter3.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterCollectionDependencyInFilter4.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterFilterFlatMapCollectionFilterMapCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterFilterFlatMapMapFilterCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterFilterMapFlatMapArrayCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterFilterMapFlatMapArrayMapCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterFilterMapForEach.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterFilterNoBraces.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterNormalNestedFilters.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeCollectionDependencyInFilter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeCollectionDependencyInFilter1.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeCollectionDependencyInFilter2.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeCollectionDependencyInFilter3.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeCollectionDependencyInFilter4.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeFilterFlatMapCollectionFilterMapCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeFilterFlatMapMapFilterCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeFilterMapFlatMapArrayCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeFilterMapFlatMapArrayMapCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeFilterMapForEach.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeFilterNoBraces.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeNormalNestedFilters.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirst.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstAssignmentCast.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstAssignmentIntermediate.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstAssignmentInterrupted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstAssignmentPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstAssignmentUsedInSameDeclaration.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstAssignmentWithLabel.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstBoolean.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstCast.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstEnum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstField.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstIfPresent.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstIfPresentWithReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstOptional.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstOptionalFlatMap.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstOptionalType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstOuterIf.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstReAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstReturnUnreachable.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstRunnableTernary.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstStaticField.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstTernary.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstValueReused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirst.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignmentCast.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignmentIntermediate.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignmentInterrupted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignmentNested.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignmentPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignmentPrimitiveMap.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignmentUsedInSameDeclaration.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignmentWithLabel.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstBoolean.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstCall.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstCast.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstEnum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstField.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstFieldOther.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstIfPresent.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstIfPresentTwoStatements.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstIfPresentWithReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstOptional.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstOptionalFlatMap.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstOptionalType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstOuterIf.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstPrimitiveNonTrivial.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstReAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstReturnUnreachable.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstRunnableTernary.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstStaticField.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstTernary.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstUsedInBound.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstValueReused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => flatMap}/afterFlatMapChangePrimitiveType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => flatMap}/afterFlatMapForLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => flatMap}/afterFlatten2DArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => flatMap}/afterFlatten2DArrayPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => flatMap}/beforeFlatMapChangePrimitiveType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => flatMap}/beforeFlatMapForLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => flatMap}/beforeFlatten2DArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => flatMap}/beforeFlatten2DArrayPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => foreach}/afterForEachCast.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => foreach}/afterForeachMethodRef.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => foreach}/beforeForEachCast.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => foreach}/beforeForeachMethodRef.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitCollectAddedOps.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitCollectInNestedLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitCount.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitCountGreater.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitCountPostfix.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitCountPrefix.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitFind.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitIntermediate.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterRangeLimited.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCollectAddedOps.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCollectInNestedLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCollectInOuterLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCollectSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCollectWrongCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCount.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCountGreater.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCountPostfix.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCountPrefix.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCountRef.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitFind.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitIntermediate.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeRangeLimited.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => minMax}/afterMaxReference.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{after'MaxReference.java => minMax/afterMinReference.java} (64%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => minMax}/beforeMaxReference.java (100%) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReference.java rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => noneMatch}/afterNoneMatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => noneMatch}/afterNoneMatchContinue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => noneMatch}/beforeNoneMatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => noneMatch}/beforeNoneMatchContinue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterCastExpected.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterCastInIterValue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterCompactFilterToMethodReference.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterComputeIfAbsentChained.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterComputeIfAbsentSimple.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterDisableForArrays.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterExplicitArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterForLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterForLoopBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterForLoopShortBound.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterFromAsList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterFromEmptyList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterIncompleteNewCall.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterMethodRef.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterMissedBraces.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterNormal.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterNormalComments.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterNormalNoBraces.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterPrimitiveArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterTooLazyCalculation.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeBreakInside.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeCastExpected.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeCastInIterValue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeCompactFilterToMethodReference.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeComputeIfAbsentChained.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeComputeIfAbsentSimple.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeDisableForArrays.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeExceptionIsThrown.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeExplicitArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeForLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeForLoopBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeForLoopFloatBound.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeForLoopShortBound.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeForLoopUpdated.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeForLoopWrongBound.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeForLoopWrongIncrement.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeForLoopWrongInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeFromAsList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeFromEmptyList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeIfIncomplete.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeIncompleteLabel.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeIncompleteNewCall.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeIterable.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeMayBeNotInitializedAndThusNotEffectivelyFinal.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeMethodRef.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeMissedBraces.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeNoFilter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeNormal.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeNormalComments.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeNormalNoBraces.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeNotEffectivelyFinalVar.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforePrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforePrimitiveArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforePrimitiveArrayWrongType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeRangeReassigned.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeRangeReassignedNested.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeRawCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeRawCollectionSubstitution.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeReturnInside.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeThrownCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeThrownExceptionsNotMatched.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeTooLazyCalculation.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterAnd.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterAndHighestBit.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterAndReplacingHexInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterAndReplacingInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterAndReplacingLongInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterConjunction.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterConjunctionBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterDisjunction.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterMultiply.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterMultiplyComplexInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterMultiplyConflictingVariable.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterMultiplyNarrowingTypeInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterMultiplyNotOneInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterMultiplyWithMapping.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterOr.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterXor.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterXorLong.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeAnd.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeAndHighestBit.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeAndReplacingHexInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeAndReplacingInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeAndReplacingLongInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeConjunction.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeConjunctionBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeDisjunction.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeMultiply.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeMultiplyComplexInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeMultiplyConflictingVariable.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeMultiplyNarrowingTypeInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeMultiplyNotOneInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeMultiplyWithMapping.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeOr.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeXor.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeXorLong.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sorted}/afterSortedToArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sorted}/beforeSortedToArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterIntArraySum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterIntFilterSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterIntSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterIntegerSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumArrayLength.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumArrayLengthNested.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumInterruptedUnused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumInterruptedUsed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumNarrowing.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumNarrowingParens.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumPromotion.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeFloatSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeIntArraySum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeIntFilterSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeIntSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeIntegerSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumAccessOuterFor.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumArrayLength.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumArrayLengthFloat.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumArrayLengthNested.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumInterruptedUnused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumInterruptedUsed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumNarrowing.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumNarrowingParens.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumPromotion.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => takeWhile}/afterTakeWhileJava9.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => takeWhile}/beforeTakeWhile.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => takeWhile}/beforeTakeWhileJava9.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayCounted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayCountedBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayCountedLength2D.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayCountedLengthGeneric.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayDeclaration.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayGeneric.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayLinkedHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayReusedCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArraySorted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayTreeSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayTwoDimensional.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayCounted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayCountedBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayCountedLength2D.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayCountedLengthGeneric.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayDeclaration.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayDeclarationCollectionUsed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayGeneric.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayIdentityHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayLinkedHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayReusedCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArraySorted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayTreeSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayTwoDimensional.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayWrongSize.java (100%) create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AllMatchStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AnyMatchStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/BufferedReaderStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectionsStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ContinueStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/DistinctStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FilterStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FindFirstStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FlatMapFirstStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ForeachFirstStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/LimitStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/MinMaxStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/NoneMatchStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/OtherStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ReductionOperationStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SortedOperationStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/StreamApiMigrationInspectionBaseTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SumOperationStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/TakeWhileOperationStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ToArrayOperationStreamApiMigrationTest.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllMatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/afterAllMatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllMatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/afterAllMatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllMatchChain.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/afterAllMatchChain.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllMatchChain.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/afterAllMatchChain.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllMatchContinue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/afterAllMatchContinue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllMatchContinue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/afterAllMatchContinue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllMatchMethodRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/afterAllMatchMethodRef.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllMatchMethodRef.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/afterAllMatchMethodRef.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAllMatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/beforeAllMatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAllMatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/beforeAllMatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAllMatchChain.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/beforeAllMatchChain.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAllMatchChain.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/beforeAllMatchChain.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAllMatchContinue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/beforeAllMatchContinue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAllMatchContinue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/beforeAllMatchContinue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAllMatchMethodRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/beforeAllMatchMethodRef.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAllMatchMethodRef.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/beforeAllMatchMethodRef.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchArrayAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchArrayAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchArrayAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchArrayAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentBoolean.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentBoolean.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentBoolean.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentBoolean.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentBooleanInverted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentBooleanInverted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentBooleanInverted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentBooleanInverted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentExtraCode.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentExtraCode.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentExtraCode.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentExtraCode.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentNonTrivial.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentNonTrivial.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentNonTrivial.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentNonTrivial.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentNonTrivialUnassigned.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentNonTrivialUnassigned.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentNonTrivialUnassigned.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentNonTrivialUnassigned.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentTryCatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentTryCatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentTryCatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentTryCatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentTryCatch2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentTryCatch2.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentTryCatch2.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentTryCatch2.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchChain.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchChain.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchChain.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchChain.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchCompoundAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchCompoundAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchCompoundAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchCompoundAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchCustomReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchCustomReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchCustomReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchCustomReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchEnclosingIf.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchEnclosingIf.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchEnclosingIf.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchEnclosingIf.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchEnclosingIfBlock.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchEnclosingIfBlock.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchEnclosingIfBlock.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchEnclosingIfBlock.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchEnclosingIfInterrupted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchEnclosingIfInterrupted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchEnclosingIfInterrupted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchEnclosingIfInterrupted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchExtends.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchExtends.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchExtends.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchExtends.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchMethodCall.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchMethodCall.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchMethodCall.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchUnreachableReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchUnreachableReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchUnreachableReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchUnreachableReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchVoid.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchVoid.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchVoid.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchVoid.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNestedAnyMatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterNestedAnyMatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNestedAnyMatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterNestedAnyMatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchArrayAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchArrayAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchArrayAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchArrayAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentBoolean.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentBoolean.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentBoolean.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentBoolean.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentBooleanInverted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentBooleanInverted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentBooleanInverted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentBooleanInverted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentExtraCode.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentExtraCode.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentExtraCode.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentExtraCode.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentNonTrivial.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentNonTrivial.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentNonTrivial.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentNonTrivial.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentNonTrivialUnassigned.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentNonTrivialUnassigned.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentNonTrivialUnassigned.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentNonTrivialUnassigned.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentTryCatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentTryCatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentTryCatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentTryCatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentTryCatch2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentTryCatch2.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentTryCatch2.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentTryCatch2.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchChain.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchChain.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchChain.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchChain.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchCompoundAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchCompoundAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchCompoundAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchCompoundAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchCustomReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchCustomReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchCustomReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchCustomReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchEnclosingIf.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchEnclosingIf.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchEnclosingIf.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchEnclosingIf.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchEnclosingIfBlock.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchEnclosingIfBlock.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchEnclosingIfBlock.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchEnclosingIfBlock.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchEnclosingIfInterrupted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchEnclosingIfInterrupted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchEnclosingIfInterrupted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchEnclosingIfInterrupted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchExtends.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchExtends.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchExtends.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchExtends.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchFloat.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchFloat.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchFloat.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchFloat.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchMethodCall.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchMethodCall.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchMethodCall.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchNonFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchNonFinal.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchNonFinal.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchNonFinal.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchReferNonFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchReferNonFinal.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchReferNonFinal.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchReferNonFinal.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchReturnDifferent.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchReturnDifferent.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchReturnDifferent.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchReturnDifferent.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchReturnInterrupted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchReturnInterrupted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchReturnInterrupted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchReturnInterrupted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchUnreachableReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchUnreachableReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchUnreachableReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchUnreachableReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchUsesVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchUsesVar.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchUsesVar.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchUsesVar.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchVoid.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchVoid.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchVoid.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchVoid.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNestedAnyMatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeNestedAnyMatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNestedAnyMatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeNestedAnyMatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNestedAnyMatchFailed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeNestedAnyMatchFailed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNestedAnyMatchFailed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeNestedAnyMatchFailed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterBufferedReaderModifiedLine.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/afterBufferedReaderModifiedLine.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterBufferedReaderModifiedLine.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/afterBufferedReaderModifiedLine.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterBufferedReaderSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/afterBufferedReaderSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterBufferedReaderSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/afterBufferedReaderSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderComplexModifiedLine.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderComplexModifiedLine.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderComplexModifiedLine.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderComplexModifiedLine.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderModifiedLine.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderModifiedLine.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderModifiedLine.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderModifiedLine.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderSumLineReused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderSumLineReused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderSumLineReused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderSumLineReused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAddPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterAddPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAddPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterAddPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterArrayFilterCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterArrayFilterCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterArrayFilterCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterArrayFilterCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterArrayListVariableType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterArrayListVariableType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterArrayListVariableType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterArrayListVariableType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterBufferedReaderCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterBufferedReaderCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterBufferedReaderCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterBufferedReaderCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterBufferedReaderCollectNestedOk.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterBufferedReaderCollectNestedOk.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterBufferedReaderCollectNestedOk.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterBufferedReaderCollectNestedOk.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectAnonymous.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectAnonymous.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectAnonymous.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectAnonymous.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListAndFilter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListAndFilter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListAndFilter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListAndFilter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListComment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListComment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListComment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListComment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListCompoundDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListCompoundDeclaration.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListCompoundDeclaration.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListCompoundDeclaration.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListLambda.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListLambda.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListLambda.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListNonTrivialInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListNonTrivialInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListNonTrivialInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListNonTrivialInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectCast.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectCast.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectCast.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectContravariant.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectContravariant.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectContravariant.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectContravariant.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectCustomConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectCustomConstructor.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectCustomConstructor.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectCustomConstructor.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectGuava.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectGuava.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectGuava.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectGuava.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectGuavaMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectGuavaMap.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectGuavaMap.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectGuavaMap.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectGuavaSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectGuavaSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectGuavaSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectGuavaSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectHashSetFieldInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectHashSetFieldInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectHashSetFieldInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectHashSetFieldInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectInterrupted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectInterrupted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectInterrupted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectInterrupted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectInterruptedInLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectInterruptedInLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectInterruptedInLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectInterruptedInLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectInterruptedUpdated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectInterruptedUpdated.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectInterruptedUpdated.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectInterruptedUpdated.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectInterruptedUsed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectInterruptedUsed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectInterruptedUsed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectInterruptedUsed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectLambda.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectLambda.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectLambda.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectLinkedHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectLinkedHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectLinkedHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectLinkedHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectListSuperType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectListSuperType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectListSuperType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectListSuperType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNewList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNewList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNewList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNewList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNewListArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNewListArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNewListArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNewListArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNewListArrayInCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNewListArrayInCall.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNewListArrayInCall.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNewListArrayInCall.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNewTreeSetArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNewTreeSetArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNewTreeSetArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNewTreeSetArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNulls.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNulls.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNulls.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNulls.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSelfCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSelfCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSelfCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSelfCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSetParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSetParameter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSetParameter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSetParameter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSorted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSorted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSorted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSorted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSortedNatural.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSortedNatural.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSortedNatural.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSortedNatural.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSupertype.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSupertype.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSupertype.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSupertype.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectToMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectToMap.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectToMap.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectToMap.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectToMapPut.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectToMapPut.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectToMapPut.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectToMapPut.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectToMapPutIfAbsent.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectToMapPutIfAbsent.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectToMapPutIfAbsent.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectToMapPutIfAbsent.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectToObj.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectToObj.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectToObj.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectToObj.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectWithSameLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectWithSameLambda.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectWithSameLambda.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectWithSameLambda.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterGroupingByArrayList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingByArrayList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterGroupingByArrayList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingByArrayList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterGroupingByCustomCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingByCustomCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterGroupingByCustomCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingByCustomCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterGroupingByDownstream.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingByDownstream.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterGroupingByDownstream.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingByDownstream.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterGroupingBySimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingBySimple.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterGroupingBySimple.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingBySimple.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoining.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoining.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoining.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoining.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningAssign.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningAssign.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningAssign.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningAssign.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningConcat.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningConcat.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningConcat.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningConcat.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningDelimited.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningDelimited.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningDelimited.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningDelimited.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningInBrackets.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningInBrackets.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningInBrackets.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningInBrackets.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningInitialValue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningInitialValue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningInitialValue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningInitialValue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningReused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningReused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningReused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningReused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningStringBuilderReused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningStringBuilderReused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningStringBuilderReused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningStringBuilderReused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningUsingIndex.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningUsingIndex.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningUsingIndex.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningUsingIndex.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterWildcardCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterWildcardCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterWildcardCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterWildcardCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAddPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeAddPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAddPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeAddPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeArrayFilterCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeArrayFilterCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeArrayFilterCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeArrayFilterCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeArrayListVariableType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeArrayListVariableType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeArrayListVariableType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeArrayListVariableType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderCollectNested.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollectNested.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderCollectNested.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollectNested.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderCollectNestedOk.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollectNestedOk.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderCollectNestedOk.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollectNestedOk.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectAnonymous.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectAnonymous.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectAnonymous.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectAnonymous.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListAndFilter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListAndFilter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListAndFilter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListAndFilter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListComment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListComment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListComment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListComment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListCompoundDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListCompoundDeclaration.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListCompoundDeclaration.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListCompoundDeclaration.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListLambda.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListLambda.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListLambda.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListNonTrivialInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListNonTrivialInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListNonTrivialInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListNonTrivialInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectCast.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectCast.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectCast.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectContravariant.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectContravariant.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectContravariant.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectContravariant.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectCustomConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectCustomConstructor.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectCustomConstructor.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectCustomConstructor.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectGuava.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectGuava.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectGuava.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectGuava.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectGuavaMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectGuavaMap.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectGuavaMap.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectGuavaMap.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectGuavaNonEmpty.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectGuavaNonEmpty.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectGuavaNonEmpty.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectGuavaNonEmpty.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectGuavaSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectGuavaSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectGuavaSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectGuavaSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectHashSetFieldInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectHashSetFieldInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectHashSetFieldInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectHashSetFieldInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectIdentityMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectIdentityMap.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectIdentityMap.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectIdentityMap.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterrupted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterrupted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterrupted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterrupted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterruptedInLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterruptedInLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterruptedInLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterruptedInLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterruptedUpdated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterruptedUpdated.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterruptedUpdated.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterruptedUpdated.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterruptedUsed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterruptedUsed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterruptedUsed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterruptedUsed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterruptedUsedFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterruptedUsedFinal.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterruptedUsedFinal.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterruptedUsedFinal.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectLambda.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectLambda.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectLambda.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectLinkedHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectLinkedHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectLinkedHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectLinkedHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectListSuperType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectListSuperType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectListSuperType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectListSuperType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNewList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNewList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNewList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNewList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNewListArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNewListArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNewListArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNewListArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNewListArrayInCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNewListArrayInCall.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNewListArrayInCall.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNewListArrayInCall.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNewTreeSetArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNewTreeSetArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNewTreeSetArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNewTreeSetArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNulls.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNulls.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNulls.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNulls.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectQualifierDependsOnLoopParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectQualifierDependsOnLoopParameter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectQualifierDependsOnLoopParameter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectQualifierDependsOnLoopParameter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSelfCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSelfCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSelfCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSelfCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSetParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSetParameter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSetParameter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSetParameter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSorted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSorted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSorted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSorted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSortedNatural.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSortedNatural.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSortedNatural.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSortedNatural.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSupertype.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSupertype.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSupertype.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSupertype.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToMap.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToMap.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToMap.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToMapPut.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToMapPut.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToMapPut.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToMapPut.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToMapPutIfAbsent.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToMapPutIfAbsent.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToMapPutIfAbsent.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToMapPutIfAbsent.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToMapPutInvalid.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToMapPutInvalid.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToMapPutInvalid.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToMapPutInvalid.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToObj.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToObj.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToObj.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToObj.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectWithAnonymous.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectWithAnonymous.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectWithAnonymous.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectWithAnonymous.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectWithLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectWithLambda.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectWithLambda.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectWithLambda.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectWithSameLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectWithSameLambda.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectWithSameLambda.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectWithSameLambda.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeGroupingByArrayList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingByArrayList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeGroupingByArrayList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingByArrayList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeGroupingByCustomCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingByCustomCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeGroupingByCustomCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingByCustomCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeGroupingByDownstream.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingByDownstream.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeGroupingByDownstream.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingByDownstream.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeGroupingBySimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingBySimple.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeGroupingBySimple.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingBySimple.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoining.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoining.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoining.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoining.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningAssign.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningAssign.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningAssign.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningAssign.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningConcat.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningConcat.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningConcat.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningConcat.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningDelimited.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningDelimited.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningDelimited.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningDelimited.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningDelimitedWrongBuilder.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningDelimitedWrongBuilder.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningDelimitedWrongBuilder.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningDelimitedWrongBuilder.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningInBrackets.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningInBrackets.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningInBrackets.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningInBrackets.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningInitialValue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningInitialValue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningInitialValue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningInitialValue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningReused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningReused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningReused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningReused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningStringBuilderReused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningStringBuilderReused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningStringBuilderReused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningStringBuilderReused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningUsingIndex.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningUsingIndex.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningUsingIndex.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningUsingIndex.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeWildcardCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeWildcardCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeWildcardCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeWildcardCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionsAddAllArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionsAddAllArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionsAddAllPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionsAddAllPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionsAddAllVarArg.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllVarArg.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionsAddAllVarArg.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllVarArg.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionsAddAllArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionsAddAllArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionsAddAllPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionsAddAllPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionsAddAllVarArg.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllVarArg.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionsAddAllVarArg.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllVarArg.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionsAddAllWrongLimit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllWrongLimit.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionsAddAllWrongLimit.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllWrongLimit.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueNegate.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueNegate.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueNegate.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueNegate.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueNegateFloat.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueNegateFloat.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueNegateFloat.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueNegateFloat.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueNested.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueNested.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueNested.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueNested.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueNestedElse.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueNestedElse.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueNestedElse.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueNestedElse.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueOr.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueOr.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueOr.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueOr.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueInside.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueInside.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueInside.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueInside.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNegate.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNegate.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNegate.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNegate.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNegateFloat.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNegateFloat.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNegateFloat.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNegateFloat.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNested.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNested.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNested.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNested.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNestedElse.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNestedElse.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNestedElse.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNestedElse.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNestedLabel.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNestedLabel.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNestedLabel.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNestedLabel.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueOr.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueOr.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueOr.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueOr.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCountArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/afterCountArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCountArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/afterCountArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCountInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/afterCountInner.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCountInner.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/afterCountInner.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCountOuter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/afterCountOuter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCountOuter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/afterCountOuter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCountPrimitiveArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/afterCountPrimitiveArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCountPrimitiveArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/afterCountPrimitiveArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountInner.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountInner.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountInner.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountOuter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountOuter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountOuter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountOuter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountPrimitiveArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountPrimitiveArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountPrimitiveArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountPrimitiveArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountShortArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountShortArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountShortArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountShortArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterDistinctCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/afterDistinctCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterDistinctCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/afterDistinctCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterDistinctCollectLimit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/afterDistinctCollectLimit.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterDistinctCollectLimit.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/afterDistinctCollectLimit.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDistinctCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDistinctCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDistinctCollectLimit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollectLimit.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDistinctCollectLimit.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollectLimit.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDistinctCollectWrongItem.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollectWrongItem.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDistinctCollectWrongItem.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollectWrongItem.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter1.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter1.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter1.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter2.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter2.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter2.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter3.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter3.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter3.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter4.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter4.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter4.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterFlatMapCollectionFilterMapCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterFlatMapCollectionFilterMapCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterFlatMapCollectionFilterMapCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterFlatMapCollectionFilterMapCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterFlatMapMapFilterCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterFlatMapMapFilterCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterFlatMapMapFilterCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterFlatMapMapFilterCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterMapFlatMapArrayCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterMapFlatMapArrayCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterMapFlatMapArrayCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterMapFlatMapArrayCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterMapFlatMapArrayMapCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterMapFlatMapArrayMapCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterMapFlatMapArrayMapCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterMapFlatMapArrayMapCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterMapForEach.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterMapForEach.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterMapForEach.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterMapForEach.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterNoBraces.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterNoBraces.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterNoBraces.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterNoBraces.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNormalNestedFilters.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterNormalNestedFilters.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNormalNestedFilters.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterNormalNestedFilters.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter1.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter1.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter1.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter2.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter2.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter2.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter3.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter3.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter3.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter4.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter4.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter4.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterFlatMapCollectionFilterMapCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterFlatMapCollectionFilterMapCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterFlatMapCollectionFilterMapCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterFlatMapCollectionFilterMapCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterFlatMapMapFilterCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterFlatMapMapFilterCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterFlatMapMapFilterCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterFlatMapMapFilterCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterMapFlatMapArrayCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterMapFlatMapArrayCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterMapFlatMapArrayCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterMapFlatMapArrayCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterMapFlatMapArrayMapCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterMapFlatMapArrayMapCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterMapFlatMapArrayMapCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterMapFlatMapArrayMapCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterMapForEach.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterMapForEach.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterMapForEach.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterMapForEach.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterNoBraces.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterNoBraces.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterNoBraces.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterNoBraces.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNormalNestedFilters.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeNormalNestedFilters.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNormalNestedFilters.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeNormalNestedFilters.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirst.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirst.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirst.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirst.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentCast.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentCast.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentCast.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentIntermediate.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentIntermediate.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentIntermediate.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentIntermediate.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentInterrupted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentInterrupted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentInterrupted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentInterrupted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentUsedInSameDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentUsedInSameDeclaration.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentUsedInSameDeclaration.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentUsedInSameDeclaration.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentWithLabel.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentWithLabel.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentWithLabel.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentWithLabel.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstBoolean.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstBoolean.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstBoolean.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstBoolean.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstCast.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstCast.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstCast.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstEnum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstEnum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstEnum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstEnum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstField.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstField.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstField.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstIfPresent.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstIfPresent.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstIfPresent.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstIfPresent.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstIfPresentWithReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstIfPresentWithReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstIfPresentWithReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstIfPresentWithReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstOptional.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstOptional.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstOptional.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstOptional.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstOptionalFlatMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstOptionalFlatMap.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstOptionalFlatMap.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstOptionalFlatMap.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstOptionalType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstOptionalType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstOptionalType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstOptionalType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstOuterIf.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstOuterIf.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstOuterIf.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstOuterIf.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstReAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstReAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstReAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstReAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstReturnUnreachable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstReturnUnreachable.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstReturnUnreachable.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstReturnUnreachable.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstRunnableTernary.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstRunnableTernary.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstRunnableTernary.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstRunnableTernary.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstStaticField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstStaticField.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstStaticField.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstStaticField.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstTernary.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstTernary.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstTernary.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstTernary.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstValueReused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstValueReused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstValueReused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstValueReused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirst.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirst.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirst.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirst.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentCast.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentCast.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentCast.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentIntermediate.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentIntermediate.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentIntermediate.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentIntermediate.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentInterrupted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentInterrupted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentInterrupted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentInterrupted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentNested.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentNested.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentNested.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentNested.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentPrimitiveMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentPrimitiveMap.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentPrimitiveMap.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentPrimitiveMap.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentUsedInSameDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentUsedInSameDeclaration.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentUsedInSameDeclaration.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentUsedInSameDeclaration.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentWithLabel.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentWithLabel.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentWithLabel.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentWithLabel.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstBoolean.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstBoolean.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstBoolean.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstBoolean.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstCall.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstCall.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstCall.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstCast.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstCast.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstCast.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstEnum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstEnum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstEnum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstEnum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstField.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstField.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstField.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstFieldOther.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstFieldOther.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstFieldOther.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstFieldOther.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstIfPresent.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstIfPresent.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstIfPresent.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstIfPresent.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstIfPresentTwoStatements.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstIfPresentTwoStatements.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstIfPresentTwoStatements.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstIfPresentTwoStatements.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstIfPresentWithReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstIfPresentWithReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstIfPresentWithReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstIfPresentWithReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstOptional.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstOptional.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstOptional.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstOptional.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstOptionalFlatMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstOptionalFlatMap.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstOptionalFlatMap.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstOptionalFlatMap.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstOptionalType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstOptionalType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstOptionalType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstOptionalType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstOuterIf.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstOuterIf.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstOuterIf.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstOuterIf.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstPrimitiveNonTrivial.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstPrimitiveNonTrivial.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstPrimitiveNonTrivial.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstPrimitiveNonTrivial.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstReAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstReAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstReAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstReAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstReturnUnreachable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstReturnUnreachable.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstReturnUnreachable.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstReturnUnreachable.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstRunnableTernary.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstRunnableTernary.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstRunnableTernary.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstRunnableTernary.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstStaticField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstStaticField.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstStaticField.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstStaticField.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstTernary.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstTernary.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstTernary.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstTernary.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstUsedInBound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstUsedInBound.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstUsedInBound.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstUsedInBound.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstValueReused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstValueReused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstValueReused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstValueReused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFlatMapChangePrimitiveType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/afterFlatMapChangePrimitiveType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFlatMapChangePrimitiveType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/afterFlatMapChangePrimitiveType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFlatMapForLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/afterFlatMapForLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFlatMapForLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/afterFlatMapForLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFlatten2DArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/afterFlatten2DArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFlatten2DArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/afterFlatten2DArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFlatten2DArrayPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/afterFlatten2DArrayPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFlatten2DArrayPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/afterFlatten2DArrayPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFlatMapChangePrimitiveType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/beforeFlatMapChangePrimitiveType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFlatMapChangePrimitiveType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/beforeFlatMapChangePrimitiveType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFlatMapForLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/beforeFlatMapForLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFlatMapForLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/beforeFlatMapForLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFlatten2DArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/beforeFlatten2DArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFlatten2DArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/beforeFlatten2DArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFlatten2DArrayPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/beforeFlatten2DArrayPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFlatten2DArrayPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/beforeFlatten2DArrayPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForEachCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/afterForEachCast.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForEachCast.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/afterForEachCast.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForeachMethodRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/afterForeachMethodRef.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForeachMethodRef.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/afterForeachMethodRef.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForEachCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/beforeForEachCast.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForEachCast.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/beforeForEachCast.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForeachMethodRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/beforeForeachMethodRef.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForeachMethodRef.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/beforeForeachMethodRef.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCollectAddedOps.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCollectAddedOps.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCollectAddedOps.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCollectAddedOps.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCollectInNestedLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCollectInNestedLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCollectInNestedLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCollectInNestedLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCount.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCount.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCount.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCount.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCountGreater.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCountGreater.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCountGreater.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCountGreater.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCountPostfix.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCountPostfix.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCountPostfix.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCountPostfix.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCountPrefix.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCountPrefix.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCountPrefix.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCountPrefix.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitFind.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitFind.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitFind.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitFind.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitIntermediate.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitIntermediate.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitIntermediate.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitIntermediate.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterRangeLimited.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterRangeLimited.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterRangeLimited.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterRangeLimited.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectAddedOps.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectAddedOps.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectAddedOps.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectAddedOps.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectInNestedLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectInNestedLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectInNestedLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectInNestedLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectInOuterLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectInOuterLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectInOuterLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectInOuterLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectWrongCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectWrongCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectWrongCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectWrongCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCount.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCount.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCount.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCount.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCountGreater.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCountGreater.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCountGreater.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCountGreater.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCountPostfix.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCountPostfix.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCountPostfix.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCountPostfix.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCountPrefix.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCountPrefix.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCountPrefix.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCountPrefix.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCountRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCountRef.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCountRef.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCountRef.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitFind.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitFind.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitFind.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitFind.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitIntermediate.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitIntermediate.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitIntermediate.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitIntermediate.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRangeLimited.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeRangeLimited.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRangeLimited.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeRangeLimited.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMaxReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMaxReference.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/after'MaxReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReference.java similarity index 64% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/after'MaxReference.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReference.java index 11d7ca0948d3..0c727d40dd58 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/after'MaxReference.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReference.java @@ -1,4 +1,6 @@ -// "Replace with max()" "false" +// "Replace with min()" "true" + +import java.util.*; public class Main { static class Person { @@ -19,14 +21,14 @@ public class Main { } } - public Person max() { + public Person work() { List personList = Arrays.asList( new Person("Roman", 21), new Person("James", 25), new Person("Kelly", 12) ); - return personList.stream() - .max(Comparator.comparingInt(Person::getAge)) - .orElse(null); + Person minPerson = personList.stream().filter(p -> p.getAge() > 13).min(Comparator.comparingInt(Person::getAge)).orElse(null); + + return minPerson; } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMaxReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMaxReference.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReference.java new file mode 100644 index 000000000000..8a5265dbccf5 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReference.java @@ -0,0 +1,41 @@ +// "Replace with min()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person minPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (minPerson == null || minPerson.getAge() > p.getAge()) { + minPerson = p; + } + } + } + + return minPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNoneMatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/noneMatch/afterNoneMatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNoneMatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/noneMatch/afterNoneMatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNoneMatchContinue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/noneMatch/afterNoneMatchContinue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNoneMatchContinue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/noneMatch/afterNoneMatchContinue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNoneMatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/noneMatch/beforeNoneMatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNoneMatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/noneMatch/beforeNoneMatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNoneMatchContinue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/noneMatch/beforeNoneMatchContinue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNoneMatchContinue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/noneMatch/beforeNoneMatchContinue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCastExpected.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterCastExpected.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCastExpected.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterCastExpected.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCastInIterValue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterCastInIterValue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCastInIterValue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterCastInIterValue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCompactFilterToMethodReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterCompactFilterToMethodReference.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCompactFilterToMethodReference.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterCompactFilterToMethodReference.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterComputeIfAbsentChained.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterComputeIfAbsentChained.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterComputeIfAbsentChained.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterComputeIfAbsentChained.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterComputeIfAbsentSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterComputeIfAbsentSimple.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterComputeIfAbsentSimple.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterComputeIfAbsentSimple.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterDisableForArrays.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterDisableForArrays.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterDisableForArrays.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterDisableForArrays.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterExplicitArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterExplicitArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterExplicitArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterExplicitArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterForLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterForLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForLoopBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterForLoopBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForLoopBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterForLoopBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForLoopShortBound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterForLoopShortBound.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForLoopShortBound.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterForLoopShortBound.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFromAsList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterFromAsList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFromAsList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterFromAsList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFromEmptyList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterFromEmptyList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFromEmptyList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterFromEmptyList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIncompleteNewCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterIncompleteNewCall.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIncompleteNewCall.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterIncompleteNewCall.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMethodRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterMethodRef.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMethodRef.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterMethodRef.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMissedBraces.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterMissedBraces.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMissedBraces.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterMissedBraces.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNormal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterNormal.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNormal.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterNormal.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNormalComments.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterNormalComments.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNormalComments.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterNormalComments.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNormalNoBraces.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterNormalNoBraces.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNormalNoBraces.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterNormalNoBraces.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterPrimitiveArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterPrimitiveArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterPrimitiveArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterPrimitiveArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterTooLazyCalculation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterTooLazyCalculation.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterTooLazyCalculation.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterTooLazyCalculation.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBreakInside.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeBreakInside.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBreakInside.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeBreakInside.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCastExpected.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeCastExpected.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCastExpected.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeCastExpected.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCastInIterValue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeCastInIterValue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCastInIterValue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeCastInIterValue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCompactFilterToMethodReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeCompactFilterToMethodReference.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCompactFilterToMethodReference.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeCompactFilterToMethodReference.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeComputeIfAbsentChained.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeComputeIfAbsentChained.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeComputeIfAbsentChained.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeComputeIfAbsentChained.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeComputeIfAbsentSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeComputeIfAbsentSimple.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeComputeIfAbsentSimple.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeComputeIfAbsentSimple.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDisableForArrays.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeDisableForArrays.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDisableForArrays.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeDisableForArrays.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeExceptionIsThrown.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeExceptionIsThrown.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeExceptionIsThrown.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeExceptionIsThrown.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeExplicitArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeExplicitArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeExplicitArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeExplicitArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopFloatBound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopFloatBound.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopFloatBound.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopFloatBound.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopShortBound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopShortBound.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopShortBound.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopShortBound.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopUpdated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopUpdated.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopUpdated.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopUpdated.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopWrongBound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopWrongBound.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopWrongBound.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopWrongBound.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopWrongIncrement.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopWrongIncrement.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopWrongIncrement.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopWrongIncrement.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopWrongInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopWrongInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopWrongInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopWrongInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFromAsList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeFromAsList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFromAsList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeFromAsList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFromEmptyList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeFromEmptyList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFromEmptyList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeFromEmptyList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIfIncomplete.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeIfIncomplete.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIfIncomplete.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeIfIncomplete.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIncompleteLabel.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeIncompleteLabel.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIncompleteLabel.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeIncompleteLabel.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIncompleteNewCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeIncompleteNewCall.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIncompleteNewCall.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeIncompleteNewCall.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIterable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeIterable.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIterable.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeIterable.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMayBeNotInitializedAndThusNotEffectivelyFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeMayBeNotInitializedAndThusNotEffectivelyFinal.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMayBeNotInitializedAndThusNotEffectivelyFinal.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeMayBeNotInitializedAndThusNotEffectivelyFinal.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMethodRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeMethodRef.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMethodRef.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeMethodRef.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMissedBraces.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeMissedBraces.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMissedBraces.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeMissedBraces.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNoFilter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNoFilter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNoFilter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNoFilter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNormal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNormal.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNormal.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNormal.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNormalComments.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNormalComments.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNormalComments.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNormalComments.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNormalNoBraces.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNormalNoBraces.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNormalNoBraces.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNormalNoBraces.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNotEffectivelyFinalVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNotEffectivelyFinalVar.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNotEffectivelyFinalVar.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNotEffectivelyFinalVar.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforePrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforePrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforePrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforePrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforePrimitiveArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforePrimitiveArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforePrimitiveArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforePrimitiveArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforePrimitiveArrayWrongType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforePrimitiveArrayWrongType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforePrimitiveArrayWrongType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforePrimitiveArrayWrongType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRangeReassigned.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeRangeReassigned.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRangeReassigned.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeRangeReassigned.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRangeReassignedNested.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeRangeReassignedNested.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRangeReassignedNested.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeRangeReassignedNested.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRawCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeRawCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRawCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeRawCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRawCollectionSubstitution.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeRawCollectionSubstitution.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRawCollectionSubstitution.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeRawCollectionSubstitution.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeReturnInside.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeReturnInside.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeReturnInside.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeReturnInside.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeThrownCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeThrownCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeThrownCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeThrownCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeThrownExceptionsNotMatched.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeThrownExceptionsNotMatched.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeThrownExceptionsNotMatched.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeThrownExceptionsNotMatched.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeTooLazyCalculation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeTooLazyCalculation.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeTooLazyCalculation.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeTooLazyCalculation.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnd.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAnd.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnd.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAnd.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAndHighestBit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAndHighestBit.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAndHighestBit.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAndHighestBit.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAndReplacingHexInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAndReplacingHexInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAndReplacingHexInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAndReplacingHexInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAndReplacingInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAndReplacingInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAndReplacingInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAndReplacingInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAndReplacingLongInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAndReplacingLongInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAndReplacingLongInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAndReplacingLongInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterConjunction.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterConjunction.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterConjunction.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterConjunction.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterConjunctionBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterConjunctionBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterConjunctionBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterConjunctionBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterDisjunction.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterDisjunction.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterDisjunction.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterDisjunction.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiply.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiply.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiply.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiply.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyComplexInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyComplexInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyComplexInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyComplexInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyConflictingVariable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyConflictingVariable.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyConflictingVariable.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyConflictingVariable.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyNarrowingTypeInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyNarrowingTypeInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyNarrowingTypeInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyNarrowingTypeInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyNotOneInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyNotOneInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyNotOneInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyNotOneInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyWithMapping.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyWithMapping.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyWithMapping.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyWithMapping.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterOr.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterOr.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterOr.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterOr.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterXor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterXor.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterXor.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterXor.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterXorLong.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterXorLong.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterXorLong.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterXorLong.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnd.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAnd.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnd.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAnd.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAndHighestBit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAndHighestBit.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAndHighestBit.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAndHighestBit.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAndReplacingHexInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAndReplacingHexInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAndReplacingHexInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAndReplacingHexInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAndReplacingInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAndReplacingInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAndReplacingInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAndReplacingInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAndReplacingLongInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAndReplacingLongInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAndReplacingLongInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAndReplacingLongInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeConjunction.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeConjunction.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeConjunction.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeConjunction.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeConjunctionBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeConjunctionBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeConjunctionBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeConjunctionBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDisjunction.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeDisjunction.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDisjunction.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeDisjunction.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiply.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiply.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiply.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiply.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyComplexInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyComplexInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyComplexInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyComplexInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyConflictingVariable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyConflictingVariable.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyConflictingVariable.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyConflictingVariable.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyNarrowingTypeInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyNarrowingTypeInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyNarrowingTypeInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyNarrowingTypeInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyNotOneInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyNotOneInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyNotOneInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyNotOneInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyWithMapping.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyWithMapping.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyWithMapping.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyWithMapping.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeOr.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeOr.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeOr.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeOr.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeXor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeXor.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeXor.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeXor.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeXorLong.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeXorLong.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeXorLong.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeXorLong.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSortedToArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sorted/afterSortedToArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSortedToArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sorted/afterSortedToArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSortedToArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sorted/beforeSortedToArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSortedToArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sorted/beforeSortedToArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIntArraySum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterIntArraySum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIntArraySum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterIntArraySum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIntFilterSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterIntFilterSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIntFilterSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterIntFilterSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIntSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterIntSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIntSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterIntSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIntegerSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterIntegerSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIntegerSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterIntegerSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumArrayLength.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumArrayLength.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumArrayLength.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumArrayLength.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumArrayLengthNested.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumArrayLengthNested.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumArrayLengthNested.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumArrayLengthNested.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumInterruptedUnused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumInterruptedUnused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumInterruptedUnused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumInterruptedUnused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumInterruptedUsed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumInterruptedUsed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumInterruptedUsed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumInterruptedUsed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumNarrowing.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumNarrowing.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumNarrowing.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumNarrowing.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumNarrowingParens.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumNarrowingParens.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumNarrowingParens.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumNarrowingParens.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumPromotion.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumPromotion.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumPromotion.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumPromotion.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFloatSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeFloatSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFloatSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeFloatSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIntArraySum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeIntArraySum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIntArraySum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeIntArraySum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIntFilterSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeIntFilterSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIntFilterSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeIntFilterSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIntSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeIntSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIntSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeIntSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIntegerSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeIntegerSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIntegerSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeIntegerSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumAccessOuterFor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumAccessOuterFor.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumAccessOuterFor.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumAccessOuterFor.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumArrayLength.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumArrayLength.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumArrayLength.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumArrayLength.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumArrayLengthFloat.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumArrayLengthFloat.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumArrayLengthFloat.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumArrayLengthFloat.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumArrayLengthNested.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumArrayLengthNested.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumArrayLengthNested.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumArrayLengthNested.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumInterruptedUnused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumInterruptedUnused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumInterruptedUnused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumInterruptedUnused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumInterruptedUsed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumInterruptedUsed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumInterruptedUsed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumInterruptedUsed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumNarrowing.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumNarrowing.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumNarrowing.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumNarrowing.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumNarrowingParens.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumNarrowingParens.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumNarrowingParens.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumNarrowingParens.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumPromotion.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumPromotion.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumPromotion.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumPromotion.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterTakeWhileJava9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/takeWhile/afterTakeWhileJava9.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterTakeWhileJava9.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/takeWhile/afterTakeWhileJava9.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeTakeWhile.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/takeWhile/beforeTakeWhile.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeTakeWhile.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/takeWhile/beforeTakeWhile.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeTakeWhileJava9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/takeWhile/beforeTakeWhileJava9.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeTakeWhileJava9.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/takeWhile/beforeTakeWhileJava9.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayCounted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCounted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayCounted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCounted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayCountedBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayCountedBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayCountedLength2D.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedLength2D.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayCountedLength2D.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedLength2D.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayCountedLengthGeneric.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedLengthGeneric.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayCountedLengthGeneric.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedLengthGeneric.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayDeclaration.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayDeclaration.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayDeclaration.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayGeneric.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayGeneric.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayGeneric.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayGeneric.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayLinkedHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayLinkedHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayLinkedHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayLinkedHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayReusedCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayReusedCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayReusedCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayReusedCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArraySorted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArraySorted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArraySorted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArraySorted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayTreeSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayTreeSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayTreeSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayTreeSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayTwoDimensional.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayTwoDimensional.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayTwoDimensional.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayTwoDimensional.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayCounted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCounted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayCounted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCounted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayCountedBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayCountedBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayCountedLength2D.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedLength2D.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayCountedLength2D.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedLength2D.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayCountedLengthGeneric.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedLengthGeneric.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayCountedLengthGeneric.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedLengthGeneric.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayDeclaration.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayDeclaration.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayDeclaration.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayDeclarationCollectionUsed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayDeclarationCollectionUsed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayDeclarationCollectionUsed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayDeclarationCollectionUsed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayGeneric.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayGeneric.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayGeneric.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayGeneric.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayIdentityHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayIdentityHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayIdentityHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayIdentityHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayLinkedHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayLinkedHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayLinkedHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayLinkedHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayReusedCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayReusedCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayReusedCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayReusedCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArraySorted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArraySorted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArraySorted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArraySorted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayTreeSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayTreeSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayTreeSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayTreeSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayTwoDimensional.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayTwoDimensional.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayTwoDimensional.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayTwoDimensional.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayWrongSize.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayWrongSize.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayWrongSize.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayWrongSize.java diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/StreamApiMigrationInspectionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/StreamApiMigrationInspectionTest.java index d80b0de30228..686add6ad00b 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/StreamApiMigrationInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/StreamApiMigrationInspectionTest.java @@ -15,33 +15,34 @@ */ package com.intellij.java.codeInsight.daemon.quickFix; -import com.intellij.codeInsight.daemon.quickFix.LightQuickFixParameterizedTestCase; -import com.intellij.codeInspection.LocalInspectionTool; -import com.intellij.codeInspection.streamMigration.StreamApiMigrationInspection; -import com.intellij.pom.java.LanguageLevel; -import org.jetbrains.annotations.NotNull; +import com.intellij.java.codeInsight.daemon.quickFix.streams.*; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; -public class StreamApiMigrationInspectionTest extends LightQuickFixParameterizedTestCase { - @NotNull - @Override - protected LocalInspectionTool[] configureLocalInspectionTools() { - StreamApiMigrationInspection inspection = new StreamApiMigrationInspection(); - inspection.SUGGEST_FOREACH = true; - return new LocalInspectionTool[]{ - inspection - }; - } +@RunWith(Suite.class) +@Suite.SuiteClasses({ + AllMatchStreamApiMigrationTest.class, + AnyMatchStreamApiMigrationTest.class, + BufferedReaderStreamApiMigrationTest.class, + CollectionsStreamApiMigrationTest.class, + CollectStreamApiMigrationTest.class, + ContinueStreamApiMigrationTest.class, + DistinctStreamApiMigrationTest.class, + FilterStreamApiMigrationTest.class, + FindFirstStreamApiMigrationTest.class, + FlatMapFirstStreamApiMigrationTest.class, + ForeachFirstStreamApiMigrationTest.class, + LimitStreamApiMigrationTest.class, + MinMaxStreamApiMigrationTest.class, + NoneMatchStreamApiMigrationTest.class, + OtherStreamApiMigrationTest.class, + ReductionOperationStreamApiMigrationTest.class, + SortedOperationStreamApiMigrationTest.class, + SumOperationStreamApiMigrationTest.class, + TakeWhileOperationStreamApiMigrationTest.class, + ToArrayOperationStreamApiMigrationTest.class +}) +public class StreamApiMigrationInspectionTest { - @Override - protected LanguageLevel getDefaultLanguageLevel() { - return LanguageLevel.JDK_1_8; - } - - public void test() throws Exception { doAllTests(); } - - @Override - protected String getBasePath() { - return "/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration"; - } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AllMatchStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AllMatchStreamApiMigrationTest.java new file mode 100644 index 000000000000..8a9474448101 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AllMatchStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class AllMatchStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "allMatch"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AnyMatchStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AnyMatchStreamApiMigrationTest.java new file mode 100644 index 000000000000..f9095677100e --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AnyMatchStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class AnyMatchStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "anyMatch"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/BufferedReaderStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/BufferedReaderStreamApiMigrationTest.java new file mode 100644 index 000000000000..d9e7489f2af5 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/BufferedReaderStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class BufferedReaderStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "bufferedReader"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectStreamApiMigrationTest.java new file mode 100644 index 000000000000..0e5ee2d05dfb --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class CollectStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "collect"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectionsStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectionsStreamApiMigrationTest.java new file mode 100644 index 000000000000..aa7a5bcfca21 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectionsStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class CollectionsStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "collections"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ContinueStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ContinueStreamApiMigrationTest.java new file mode 100644 index 000000000000..5d4fa9aaf09d --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ContinueStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class ContinueStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "continue"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/DistinctStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/DistinctStreamApiMigrationTest.java new file mode 100644 index 000000000000..d468810dccd4 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/DistinctStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class DistinctStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "distinct"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FilterStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FilterStreamApiMigrationTest.java new file mode 100644 index 000000000000..0ac365989343 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FilterStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class FilterStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "filter"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FindFirstStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FindFirstStreamApiMigrationTest.java new file mode 100644 index 000000000000..519f5afaadbb --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FindFirstStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class FindFirstStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "findFirst"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FlatMapFirstStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FlatMapFirstStreamApiMigrationTest.java new file mode 100644 index 000000000000..1881e1f35dc1 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FlatMapFirstStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class FlatMapFirstStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "flatMap"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ForeachFirstStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ForeachFirstStreamApiMigrationTest.java new file mode 100644 index 000000000000..d6186e1a5895 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ForeachFirstStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class ForeachFirstStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "foreach"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/LimitStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/LimitStreamApiMigrationTest.java new file mode 100644 index 000000000000..a04562580f65 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/LimitStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class LimitStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "limit"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/MinMaxStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/MinMaxStreamApiMigrationTest.java new file mode 100644 index 000000000000..9a2d98cb49d3 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/MinMaxStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class MinMaxStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "minMax"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/NoneMatchStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/NoneMatchStreamApiMigrationTest.java new file mode 100644 index 000000000000..5d0239a34883 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/NoneMatchStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class NoneMatchStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "noneMatch"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/OtherStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/OtherStreamApiMigrationTest.java new file mode 100644 index 000000000000..990bcdd39b13 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/OtherStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class OtherStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "other"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ReductionOperationStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ReductionOperationStreamApiMigrationTest.java new file mode 100644 index 000000000000..4b0b42b5b391 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ReductionOperationStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class ReductionOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "reduce"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SortedOperationStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SortedOperationStreamApiMigrationTest.java new file mode 100644 index 000000000000..a8b217beacbe --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SortedOperationStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class SortedOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "sorted"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/StreamApiMigrationInspectionBaseTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/StreamApiMigrationInspectionBaseTest.java new file mode 100644 index 000000000000..7e6021026909 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/StreamApiMigrationInspectionBaseTest.java @@ -0,0 +1,51 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + +import com.intellij.codeInsight.daemon.quickFix.LightQuickFixParameterizedTestCase; +import com.intellij.codeInspection.LocalInspectionTool; +import com.intellij.codeInspection.streamMigration.StreamApiMigrationInspection; +import com.intellij.pom.java.LanguageLevel; +import org.jetbrains.annotations.NotNull; + +/** + * Created by Roman Ivanov. + */ +public abstract class StreamApiMigrationInspectionBaseTest extends LightQuickFixParameterizedTestCase { + @NotNull + @Override + protected LocalInspectionTool[] configureLocalInspectionTools() { + StreamApiMigrationInspection inspection = new StreamApiMigrationInspection(); + inspection.SUGGEST_FOREACH = true; + return new LocalInspectionTool[]{ + inspection + }; + } + + @Override + protected LanguageLevel getDefaultLanguageLevel() { + return LanguageLevel.JDK_1_8; + } + + public void test() throws Exception { doAllTests(); } + + abstract String getFolder(); + + @Override + protected String getBasePath() { + return "/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/" + getFolder(); + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SumOperationStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SumOperationStreamApiMigrationTest.java new file mode 100644 index 000000000000..aeacb294a164 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SumOperationStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class SumOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "sum"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/TakeWhileOperationStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/TakeWhileOperationStreamApiMigrationTest.java new file mode 100644 index 000000000000..1c72684cc98e --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/TakeWhileOperationStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class TakeWhileOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "takeWhile"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ToArrayOperationStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ToArrayOperationStreamApiMigrationTest.java new file mode 100644 index 000000000000..71318107db58 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ToArrayOperationStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class ToArrayOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "toArray"; + } +} From f43e56063f530f16ff9bd222d45dc7235629f4bf Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Mon, 24 Jul 2017 17:47:00 +0700 Subject: [PATCH 04/28] largely refactor find extremum migration to make it extensible --- .../FindExtremumMigration.java | 479 ++++++++++++------ .../StreamApiMigrationInspection.java | 4 +- ...Reference.java => afterMaxReference1.java} | 0 .../minMax/afterMaxReference2.java | 34 ++ .../minMax/afterMaxReference3.java | 34 ++ .../minMax/afterMaxReference4.java | 34 ++ .../minMax/afterMaxReference5.java | 34 ++ ...eference.java => beforeMaxReference1.java} | 0 .../minMax/beforeMaxReference2.java | 44 ++ .../minMax/beforeMaxReference3.java | 45 ++ .../minMax/beforeMaxReference4.java | 41 ++ .../minMax/beforeMaxReference5.java | 41 ++ 12 files changed, 643 insertions(+), 147 deletions(-) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/{afterMaxReference.java => afterMaxReference1.java} (100%) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference2.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference3.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference4.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference5.java rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/{beforeMaxReference.java => beforeMaxReference1.java} (100%) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference2.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference3.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference4.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference5.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 3ed4115ac2da..fd74a5e5baa1 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -21,118 +21,195 @@ import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.List; - import static com.intellij.util.ObjectUtils.tryCast; /** * Created by Roman Ivanov. */ public class FindExtremumMigration extends BaseStreamApiMigration { - private final ExtremumTerminal myExtremumTerminal; static final String MAX_REPLACEMENT = "max()"; static final String MIN_REPLACEMENT = "min()"; protected FindExtremumMigration(boolean shouldWarn, - String replacement, - ExtremumTerminal terminal) { + String replacement) { super(shouldWarn, replacement); - myExtremumTerminal = terminal; } @Override PsiElement migrate(@NotNull Project project, @NotNull PsiStatement body, @NotNull TerminalBlock tb) { - String operation = myExtremumTerminal.isMax() ? "max" : "min"; + ExtremumTerminal terminal = extractExtremumTerminal(tb); + if (terminal == null) return null; + String operation = terminal.isMax() ? "max" : "min"; String comparator; - if(!myExtremumTerminal.myIsPrimitive) { - PsiMember keySelector = myExtremumTerminal.getKeySelector(); - String comparatorLambda = null; - PsiType type = null; - if(keySelector instanceof PsiMethod) { - // TODO how to create method reference properly? - PsiClass containingClass = keySelector.getContainingClass(); - if(containingClass == null) return null; // TODO how it could be? - String classQualifiedName = containingClass.getQualifiedName(); - if(classQualifiedName == null) return null; - comparatorLambda = classQualifiedName + "::" + keySelector.getName(); - PsiType returnType = ((PsiMethod)keySelector).getReturnType(); - if(returnType == null) return null; // TODO maybe check this in extraction and pass as context? - type = returnType; - } else if(keySelector instanceof PsiVariable) { - return null; //TODO - } - if(type == null) return null; // TODO it should never happen - String comparingMethod = getComparingMethod(type); - if(comparingMethod == null) return null; - comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + comparingMethod + "(" + comparatorLambda + ")"; - } else { - comparator = ""; // TODO + KeySelector keySelector = terminal.getKeySelector(); + PsiVariable currentVariable = + terminal.getCurrentVariable(); // TODO is it needed to check if type of comparator and current variable are the same + + String lambdaText = keySelector.getLambdaText(currentVariable); + String comparingMethod = getComparingMethod(keySelector.acceptingType()); + if (comparingMethod == null) return null; + comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + comparingMethod + "(" + lambdaText + ")"; + + TerminalBlock terminalBlock = terminal.getTerminalBlock(); + String stream = terminalBlock.generate() + "." + operation + "(" + comparator + ").orElse(null)"; // TODO handle primitive + PsiLoopStatement loop = terminalBlock.getMainLoop(); + + return replaceWithFindExtremum(loop, terminal.getExtremumHolder(), stream, PsiType.INT); // TODO type? + } + + + @Nullable + static ExtremumTerminal extractExtremumTerminal(@NotNull TerminalBlock tb) { + PsiStatement[] statements = tb.getStatements(); + StreamApiMigrationInspection.Operation operation = tb.getLastOperation(); + StreamApiMigrationInspection.FilterOp filterOp = tryCast(operation, StreamApiMigrationInspection.FilterOp.class); + if (filterOp != null) { + tb = tb.withoutLastOperation(); + if (tb == null) return null; + ExtremumTerminal terminal = extractSimpleCase(filterOp.getExpression(), statements, tb); + if (terminal != null) return terminal; } + switch (statements.length) { + case 1: // if() .. else .. + break; + case 2: // if () .. if() .. + break; + } + return null; + } - String stream = myExtremumTerminal.getTerminalBlock().generate() + "." + operation + "(" + comparator + ").orElse(null)"; // TODO handle primitive - PsiLoopStatement loop = tb.getMainLoop(); + // maxPerson == null || maxPerson.getAge() < person.getAge() + @Nullable + private static ExtremumTerminal extractSimpleCase(@NotNull PsiExpression filterExpression, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock) { + PsiBinaryExpression binaryExpression = tryCast(filterExpression, PsiBinaryExpression.class); + if (binaryExpression == null) return null; - return replaceWithFindExtremum(loop, myExtremumTerminal.getExtremumHolder(), stream, PsiType.INT); // TODO type? + IElementType sign = binaryExpression.getOperationSign().getTokenType(); + if (!sign.equals(JavaTokenType.OROR)) { + return null; + } + PsiExpression lOperand = binaryExpression.getLOperand(); + PsiExpression rOperand = binaryExpression.getROperand(); + if(rOperand == null) return null; + ExtremumTerminal terminal = extractSimpleCaseOriented(lOperand, rOperand, statements, terminalBlock); + if(terminal != null) return terminal; + return extractSimpleCaseOriented(rOperand, lOperand, statements, terminalBlock); + } + + @Nullable + private static ExtremumTerminal extractSimpleCaseOriented(@NotNull PsiExpression first, + @NotNull PsiExpression second, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock) { + if (first instanceof PsiBinaryExpression) { + PsiVariable extremumHolder = extractNullCheckingVar((PsiBinaryExpression)first); + if (second instanceof PsiBinaryExpression && extremumHolder != null) { + + Comparision comparision = extractComparision((PsiBinaryExpression)second); + if (comparision == null) return null; + Assignment[] assignments = extractAssignments(statements); + if (assignments == null) return null; + return extractExtremumTerminal(comparision, assignments, extremumHolder, terminalBlock); + } + } + return null; } @Nullable static private String getComparingMethod(@NotNull PsiType type) { - if(type.equals(PsiType.INT)) return "comparingInt"; - if(type.equals(PsiType.DOUBLE)) return "comparingDouble"; - if(type.equals(PsiType.LONG)) return "comparingLong"; + if (type.equals(PsiType.INT)) return "comparingInt"; + if (type.equals(PsiType.DOUBLE)) return "comparingDouble"; + if (type.equals(PsiType.LONG)) return "comparingLong"; return null; // TODO more precise handling } + @Nullable + static private Assignment[] extractAssignments(@NotNull PsiStatement[] statements) { + if (statements.length == 1) { + Assignment assignment = getSingleAssignment(statements[0]); + if (assignment == null) return null; + return new Assignment[]{assignment}; + } + else if (statements.length == 2) { + Assignment first = getSingleAssignment(statements[0]); + if (first == null) return null; + Assignment second = getSingleAssignment(statements[1]); + if (second == null) return null; + return new Assignment[]{first, second}; + } + return null; + } - static @Nullable - ExtremumTerminal extractExtremumTerminal(@NotNull TerminalBlock tb, @NotNull List variables) { - StreamApiMigrationInspection.FilterOp filterOp = tb.getLastOperation(StreamApiMigrationInspection.FilterOp.class); - if(filterOp == null) return null; - tb = tb.withoutLastOperation(); - if(tb == null) return null; + @Nullable + private static Assignment getSingleAssignment(@NotNull PsiStatement statement) { + if (statement instanceof PsiExpressionStatement) { + PsiAssignmentExpression assignment = tryCast(((PsiExpressionStatement)statement).getExpression(), PsiAssignmentExpression.class); + PsiReferenceExpression holderReference = tryCast(assignment.getLExpression(), PsiReferenceExpression.class); + if (holderReference == null) return null; + PsiVariable holder = tryCast(holderReference.resolve(), PsiVariable.class); + if (holder == null) return null; + PsiExpression expression = assignment.getRExpression(); + if (expression == null) return null; + return new Assignment(holder, expression); + } + return null; + } - if (variables.size() == 1) { // possibly collecting extremum in single variable - PsiBinaryExpression binaryExpression = tryCast(filterOp.myExpression, PsiBinaryExpression.class); - if (binaryExpression == null) return null; - PsiExpression lOperand = binaryExpression.getLOperand(); + @Nullable + private static ExtremumTerminal extractExtremumTerminal(@NotNull Comparision comparision, + @NotNull Assignment[] assignments, + @NotNull PsiVariable nullCheckedHolder, + @NotNull TerminalBlock terminalBlock) { + PsiExpression initializer = nullCheckedHolder.getInitializer(); + if (initializer == null || !PsiType.NULL.equals(initializer.getType())) return null; - //TODO primitive - IElementType sign = binaryExpression.getOperationSign().getTokenType(); - if (sign.equals(JavaTokenType.OROR)) {// maxPerson == null || maxPerson.getAge() < person.getAge() - // stream().max(Comparator.comparingInt(Person::getAge) - if (lOperand instanceof PsiBinaryExpression) { - PsiVariable extremumHolder = extractNullCheckingVar((PsiBinaryExpression)lOperand); - PsiExpression rOperand = binaryExpression.getROperand(); - if(rOperand instanceof PsiBinaryExpression && extremumHolder != null) { - ComparisionContext comparision = extractComparision((PsiBinaryExpression)rOperand, extremumHolder); - if(comparision == null) return null; - PsiAssignmentExpression assignmentExpression = tb.getSingleExpression(PsiAssignmentExpression.class); - if(assignmentExpression == null) return null; - PsiReference reference = assignmentExpression.getLExpression().getReference(); - if(reference == null) return null; - PsiVariable leftVar = tryCast(reference.resolve(), PsiVariable.class); - PsiExpression assigned = assignmentExpression.getRExpression(); + //TODO control flow? how to understand if it didn't change? + + final boolean isMax; + final PsiVariable comparisionExtremumHolder; + final PsiVariable comparisionCurrent; + final KeySelector comparisionKeySelector; + if (comparision.getFirst().getVariable().equals(nullCheckedHolder)) { + isMax = !comparision.isGreater(); + comparisionExtremumHolder = comparision.getFirst().getVariable(); + comparisionCurrent = comparision.getSecond().getVariable(); + comparisionKeySelector = comparision.getFirst(); + } + else if (comparision.getSecond().getVariable().equals(nullCheckedHolder)) { + isMax = comparision.isGreater(); + comparisionExtremumHolder = comparision.getSecond().getVariable(); + comparisionCurrent = comparision.getFirst().getVariable(); + comparisionKeySelector = comparision.getSecond(); + } + else { + return null; + } + + if (assignments.length == 1) { + Assignment assignment = assignments[0]; + if (!assignment.getExtremumHolder().equals(nullCheckedHolder)) return null; + if (assignment.hasSameVariables(comparisionExtremumHolder, comparisionCurrent)) return null; + return new ExtremumTerminal(isMax, comparisionKeySelector, comparisionCurrent, comparisionExtremumHolder, terminalBlock, null); + } + else if (assignments.length == 2) { + //if(max == null || maxAge < current.getAge()) {max = + Assignment first = assignments[0]; + Assignment second = assignments[1]; + if (first.getExtremumHolder().equals(nullCheckedHolder) && first.hasSameVariables(comparisionExtremumHolder, comparisionCurrent)) { + KeySelector assignmentKeySelector = KeySelector.extractKeySelector(second.getExpression()); + if (assignmentKeySelector != null && comparisionKeySelector.equals(assignmentKeySelector)) { + PsiVariable keyExtremumHolder = assignmentKeySelector.getVariable(); + if (keyExtremumHolder.equals(comparisionCurrent)) { - if(leftVar == null || assigned == null) return null; - //TODO how to compare references? - if(!leftVar.equals(extremumHolder) || !assigned.getText().equals(comparision.getCurrentVariable().getName())) return null; // TODO how to compare - return new ExtremumTerminal(false, comparision.isMax(), comparision.getKeySelector(), comparision.getCurrentVariable(), null, - tb, extremumHolder); } + //TODO } } - else if (sign.equals(JavaTokenType.EQEQ)) { // maxPerson == null, and actual comparision inside if - PsiVariable variable = extractNullCheckingVar(binaryExpression); - } - // Incompatible with long streams with filter ops and so on - //else if(sign.equals(JavaTokenType.GT)) { // TODO maxPerson.getAge() < person.getAge() - before this empty check and use - // - //} - } - else if (variables.size() == 2) { // intermediate extremum value in separate variable (maxPersonAge) - //TODO + //else if() // TODO second is extremum holder assignment } else { return null; @@ -141,52 +218,33 @@ public class FindExtremumMigration extends BaseStreamApiMigration { } @Nullable - private static ComparisionContext extractComparision(@NotNull PsiBinaryExpression expression, @NotNull PsiVariable extremumHolder) { + private static Comparision extractComparision(@NotNull PsiBinaryExpression expression) { IElementType sign = expression.getOperationSign().getTokenType(); PsiExpression operand = expression.getROperand(); - if(operand == null) return null; + if (operand == null) return null; if (sign.equals(JavaTokenType.LT) || sign.equals(JavaTokenType.LE)) { - return extractComparision(expression.getLOperand(), operand, extremumHolder, true); + return extractComparision(expression.getLOperand(), operand, false); } else if (sign.equals(JavaTokenType.GT) || sign.equals(JavaTokenType.GE)) { - return extractComparision(expression.getLOperand(), operand, extremumHolder, false); + return extractComparision(expression.getLOperand(), operand, true); } return null; } - - //TODO inline? @Nullable - private static ComparisionContext extractComparision(@NotNull PsiExpression first, - @NotNull PsiExpression second, - @NotNull PsiVariable extremumHolder, - boolean firstLess) { - PsiVariable firstReceiver = resolveMethodReceiver(first); // works only for methods - PsiVariable secondReceiver = resolveMethodReceiver(second); - if(firstReceiver == null || secondReceiver == null) return null; - PsiMethod firstMethod = resolveMethod(first); - PsiMethod secondMethod = resolveMethod(first); - if(firstMethod == null || secondMethod == null) return null; - if(!firstMethod.equals(secondMethod)) return null; // TODO is it correct equals? - if(extremumHolder.equals(firstReceiver)) { // TODO is it correct equals? - return new ComparisionContext(firstLess, firstMethod, secondReceiver); - } else if(extremumHolder.equals(secondReceiver)) { - return new ComparisionContext(!firstLess, secondMethod, firstReceiver); - } - //EquivalenceChecker equivalence = EquivalenceChecker.getCanonicalPsiEquivalence(); - //EquivalenceChecker.Match match = equivalence.expressionsMatch(first, second); - //PsiVariable variable = tryCast(match.getLeftDiff(), PsiVariable.class); - return null; + private static Comparision extractComparision(@NotNull PsiExpression first, @NotNull PsiExpression second, boolean isGreater) { + KeySelector firstSelector = KeySelector.extractKeySelector(first); + KeySelector secondSelector = KeySelector.extractKeySelector(second); + if (firstSelector == null || secondSelector == null || !firstSelector.equals(secondSelector)) return null; + return new Comparision(firstSelector, secondSelector, isGreater); } - - @Nullable private static PsiVariable resolveMethodReceiver(@NotNull PsiExpression expression) { PsiMethodCallExpression methodCallExpression = tryCast(expression, PsiMethodCallExpression.class); PsiExpression qualifierExpression = methodCallExpression.getMethodExpression().getQualifierExpression(); PsiReferenceExpression reference = tryCast(qualifierExpression, PsiReferenceExpression.class); - if(reference == null) return null; + if (reference == null) return null; return tryCast(reference.resolve(), PsiVariable.class); } @@ -226,82 +284,213 @@ public class FindExtremumMigration extends BaseStreamApiMigration { return null; } - static class ComparisionContext { - private final boolean myIsMax; - private final PsiMember myKeySelector; // field or method - private final PsiVariable myCurrentVariable; + /** + * Used to create Comparator + */ + interface KeySelector { + @NotNull + String getLambdaText(@NotNull PsiVariable variable); - public ComparisionContext(boolean isMax, @NotNull PsiMember keySelector, @NotNull PsiVariable currentVariable) { - myIsMax = isMax; - myKeySelector = keySelector; - myCurrentVariable = currentVariable; + @NotNull + PsiType acceptingType(); + + @NotNull + PsiVariable getVariable(); + + @Nullable + static KeySelector extractKeySelector(@NotNull PsiExpression expression) { + MethodKeySelector methodKeySelector = MethodKeySelector.extract(expression); + if (methodKeySelector != null) return methodKeySelector; + VariableKeySelector variableKeySelector = VariableKeySelector.extract(expression); + if (variableKeySelector != null) return variableKeySelector; + return null; + } + } + // + + static class MethodKeySelector implements KeySelector { + private final @NotNull PsiMethod myMethod; + private final @NotNull PsiVariable myVariable; + @NotNull private final PsiClass myContainingClass; + @NotNull private final PsiType myType; + + MethodKeySelector(@NotNull PsiMethod method, + @NotNull PsiVariable variable, + @NotNull PsiClass containingClass, + @NotNull PsiType type) { + myMethod = method; + myVariable = variable; + myContainingClass = containingClass; + myType = type; } - public boolean isMax() { - return myIsMax; + @NotNull + @Override + public String getLambdaText(@NotNull PsiVariable variable) { + return myContainingClass.getQualifiedName() + "::" + myMethod.getName(); } - public PsiMember getKeySelector() { - return myKeySelector; + @NotNull + @Override + public PsiType acceptingType() { + return myType; } - public PsiVariable getCurrentVariable() { - return myCurrentVariable; + @NotNull + @Override + public PsiVariable getVariable() { + return myVariable; + } + + @Override + public boolean equals(Object obj) { + return obj instanceof MethodKeySelector && ((MethodKeySelector)obj).myMethod == myMethod; + } + + @Nullable + static MethodKeySelector extract(@NotNull PsiExpression expression) { + PsiMethod method = resolveMethod(expression); + if (method == null) return null; + PsiVariable receiver = resolveMethodReceiver(expression); + if (receiver == null) return null; + PsiClass containingClass = method.getContainingClass(); + if (containingClass == null) return null; + PsiType returnType = method.getReturnType(); + if (returnType == null) return null; + return new MethodKeySelector(method, receiver, containingClass, returnType); + } + } + + private static class VariableKeySelector implements KeySelector { + private final PsiVariable myVariable; + + private VariableKeySelector(PsiVariable variable) {myVariable = variable;} + + @NotNull + @Override + public String getLambdaText(@NotNull PsiVariable variable) { + String variableText = myVariable.getText(); + return variableText + "->" + variableText; + } + + @NotNull + @Override + public PsiType acceptingType() { + return myVariable.getType(); + } + + @NotNull + @Override + public PsiVariable getVariable() { + return myVariable; + } + + @Nullable + static VariableKeySelector extract(@NotNull PsiExpression expression) { + PsiVariable variable = tryCast(expression, PsiVariable.class); + if (variable == null) return null; + return new VariableKeySelector(variable); + } + } + + private static class Assignment { + private final @NotNull PsiVariable myExtremumHolder; + private final @NotNull PsiExpression myExpression; + + private Assignment(@NotNull PsiVariable extremumHolder, @NotNull PsiExpression expression) { + myExtremumHolder = extremumHolder; + myExpression = expression; + } + + @NotNull + public PsiVariable getExtremumHolder() { + return myExtremumHolder; + } + + @NotNull + public PsiExpression getExpression() { + return myExpression; + } + + private boolean hasSameVariables(@NotNull PsiVariable extremumHolder, @NotNull PsiVariable current) { + PsiVariable rVariable = tryCast(myExpression, PsiVariable.class); + return rVariable != null & myExtremumHolder.equals(extremumHolder) && rVariable.equals(current); + } + } + + static class Comparision { + private final @NotNull KeySelector myFirst; + private final @NotNull KeySelector mySecond; + private final boolean myIsGreater; + + Comparision(@NotNull KeySelector first, @NotNull KeySelector second, boolean greater) { + myFirst = first; + mySecond = second; + myIsGreater = greater; + } + + public boolean isGreater() { + return myIsGreater; + } + + public KeySelector getSecond() { + return mySecond; + } + + public KeySelector getFirst() { + return myFirst; } } static class ExtremumTerminal { - private final boolean myIsPrimitive; private final boolean myIsMax; - private final PsiMember myKeySelector; // field or method - private final PsiVariable myCurrentVariable; - private final PsiExpression myStartingValue; - private final TerminalBlock myTerminalBlock; - private final PsiVariable myExtremumHolder; + private final @NotNull KeySelector myKeySelector; // field or method + private final @NotNull PsiVariable myCurrentVariable; + private final @NotNull PsiVariable myExtremumHolder; + private final @NotNull TerminalBlock myTerminalBlock; + private final @Nullable PsiExpression myStartingValue; - - public ExtremumTerminal(boolean isPrimitive, - boolean isMax, - @NotNull PsiMember keySelector, + public ExtremumTerminal(boolean isMax, + @NotNull KeySelector keySelector, @NotNull PsiVariable currentVariable, - @Nullable PsiExpression startingValue, - @NotNull TerminalBlock block, - @NotNull PsiVariable extremumHolder) { - myIsPrimitive = isPrimitive; + @NotNull PsiVariable extremumHolder, + @NotNull TerminalBlock terminalBlock, + @Nullable PsiExpression startingValue) { myIsMax = isMax; myKeySelector = keySelector; myCurrentVariable = currentVariable; - myStartingValue = startingValue; - myTerminalBlock = block; myExtremumHolder = extremumHolder; - } - - public boolean isPrimitive() { - return myIsPrimitive; + myStartingValue = startingValue; + myTerminalBlock = terminalBlock; } public boolean isMax() { return myIsMax; } - public PsiMember getKeySelector() { + @NotNull + public KeySelector getKeySelector() { return myKeySelector; } + @NotNull public PsiVariable getCurrentVariable() { return myCurrentVariable; } + @NotNull + public PsiVariable getExtremumHolder() { + return myExtremumHolder; + } + + @Nullable public PsiExpression getStartingValue() { return myStartingValue; } + @NotNull public TerminalBlock getTerminalBlock() { return myTerminalBlock; } - - public PsiVariable getExtremumHolder() { - return myExtremumHolder; - } } } diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java index 1212c366d30b..5180b11b038b 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java @@ -495,9 +495,9 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo if (getAccumulatedVariable(tb, nonFinalVariables, SUM_OPERATION) != null) { return new SumMigration(true); } - FindExtremumMigration.ExtremumTerminal extremumTerminal = FindExtremumMigration.extractExtremumTerminal(tb, nonFinalVariables); + FindExtremumMigration.ExtremumTerminal extremumTerminal = FindExtremumMigration.extractExtremumTerminal(tb); if(extremumTerminal != null) { - return new FindExtremumMigration(true, extremumTerminal.isMax()? MAX_REPLACEMENT : MIN_REPLACEMENT, extremumTerminal); + return new FindExtremumMigration(true, extremumTerminal.isMax()? MAX_REPLACEMENT : MIN_REPLACEMENT); } for (OperationReductionMigration.ReductionOperation reductionOperation : OperationReductionMigration.OPERATIONS) { if (getAccumulatedVariable(tb, nonFinalVariables, reductionOperation) != null) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference1.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference1.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference2.java new file mode 100644 index 000000000000..94b3a39d1f41 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference2.java @@ -0,0 +1,34 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference3.java new file mode 100644 index 000000000000..94b3a39d1f41 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference3.java @@ -0,0 +1,34 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference4.java new file mode 100644 index 000000000000..94b3a39d1f41 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference4.java @@ -0,0 +1,34 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference5.java new file mode 100644 index 000000000000..94b3a39d1f41 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference5.java @@ -0,0 +1,34 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference1.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference1.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference2.java new file mode 100644 index 000000000000..30d4c101ddbf --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference2.java @@ -0,0 +1,44 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null) { + maxPerson = p; + } + else if (maxPerson.getAge() < p.getAge()) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference3.java new file mode 100644 index 000000000000..35a281408f48 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference3.java @@ -0,0 +1,45 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null) { + maxPerson = p; + continue; + } + if (maxPerson.getAge() < p.getAge()) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference4.java new file mode 100644 index 000000000000..5bdcc6abb1c7 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference4.java @@ -0,0 +1,41 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null || p.getAge() > maxPerson.getAge()) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference5.java new file mode 100644 index 000000000000..e55ef0f62c56 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference5.java @@ -0,0 +1,41 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (p.getAge() > maxPerson.getAge() || maxPerson == null) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file From 8462f7e34b1c400f0735761a27e16e2b17c7667a Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Tue, 25 Jul 2017 13:01:53 +0700 Subject: [PATCH 05/28] add basic support for primitive streams --- .../BaseStreamApiMigration.java | 23 +- .../FindExtremumMigration.java | 321 +++++++++++++++--- .../minMax/afterMaxPrimitive.java | 9 + .../minMax/afterMaxReferenceField.java | 34 ++ .../minMax/beforeMaxPrimitive.java | 16 + .../minMax/beforeMaxReferenceField.java | 41 +++ .../minMax/beforeMaxReferenceShortMethod.java | 41 +++ 7 files changed, 423 insertions(+), 62 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceField.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitive.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceField.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceShortMethod.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java index 1555eeb23722..3441a056f780 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java @@ -89,23 +89,18 @@ abstract class BaseStreamApiMigration { static PsiElement replaceWithFindExtremum(PsiLoopStatement loopStatement, - PsiVariable extremumHolder, - String streamText, - PsiType streamResultType) { + PsiVariable extremumHolder, + String streamText) { PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(loopStatement.getProject()); restoreComments(loopStatement, loopStatement.getBody()); - InitializerUsageStatus status = ControlFlowUtils.getInitializerUsageStatus(extremumHolder, loopStatement); - if(status == ControlFlowUtils.InitializerUsageStatus.DECLARED_JUST_BEFORE) { // TODO it should be checked before suggesting to prevent NPE - removeLoop(loopStatement); - PsiExpression initializer = extremumHolder.getInitializer(); - if(initializer != null) { - PsiExpression streamExpression = elementFactory.createExpressionFromText(streamText, extremumHolder); // TODO cast expression if needed - return initializer.replace(streamExpression); - } else { - return null; // TODO remove extremum holder and create on this place all - } + removeLoop(loopStatement); + PsiExpression initializer = extremumHolder.getInitializer(); + if(initializer != null) { + PsiExpression streamExpression = elementFactory.createExpressionFromText(streamText, extremumHolder); // TODO cast expression if needed + return initializer.replace(streamExpression); + } else { + return null; // TODO remove extremum holder and create on this place all } - return null; } static void restoreComments(PsiLoopStatement loopStatement, PsiStatement body) { diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index fd74a5e5baa1..a3eb154a9716 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -17,7 +17,11 @@ package com.intellij.codeInspection.streamMigration; import com.intellij.openapi.project.Project; import com.intellij.psi.*; +import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.tree.IElementType; +import com.siyeh.ig.psiutils.ControlFlowUtils; +import com.siyeh.ig.psiutils.EquivalenceChecker; +import com.siyeh.ig.psiutils.ExpressionUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -31,8 +35,9 @@ public class FindExtremumMigration extends BaseStreamApiMigration { static final String MAX_REPLACEMENT = "max()"; static final String MIN_REPLACEMENT = "min()"; - protected FindExtremumMigration(boolean shouldWarn, - String replacement) { + private static final EquivalenceChecker ourEquivalence = EquivalenceChecker.getCanonicalPsiEquivalence(); + + protected FindExtremumMigration(boolean shouldWarn, String replacement) { super(shouldWarn, replacement); } @@ -45,18 +50,43 @@ public class FindExtremumMigration extends BaseStreamApiMigration { String comparator; KeySelector keySelector = terminal.getKeySelector(); PsiVariable currentVariable = - terminal.getCurrentVariable(); // TODO is it needed to check if type of comparator and current variable are the same + terminal.getCurrentVariable(); - String lambdaText = keySelector.getLambdaText(currentVariable); - String comparingMethod = getComparingMethod(keySelector.acceptingType()); + JavaCodeStyleManager javaStyle = JavaCodeStyleManager.getInstance(project); + String name = currentVariable.getName(); + if (name == null) name = "x"; + javaStyle.suggestUniqueVariableName(name, body, true); + String lambdaText = keySelector.getLambdaText(name); + PsiType lambdaReturnType = keySelector.acceptingType(); + String comparingMethod = getComparingMethod(lambdaReturnType); if (comparingMethod == null) return null; comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + comparingMethod + "(" + lambdaText + ")"; TerminalBlock terminalBlock = terminal.getTerminalBlock(); - String stream = terminalBlock.generate() + "." + operation + "(" + comparator + ").orElse(null)"; // TODO handle primitive + + String stream; + if (!terminal.isPrimitive()) { + stream = terminalBlock.generate() + "." + operation + "(" + comparator + ").orElse(null)"; + } + else { + String startingValue; + String filterOp; + if (terminal.getStartingValue() != null) { + startingValue = terminal.getStartingValue().toString(); + String inFilterOperation = terminal.isMax() ? ">=" : "<="; + filterOp = ".filter("+ name+"->" + name + inFilterOperation + terminal.getStartingValue().toString() + ")"; + } + else { + startingValue = ""; + filterOp = ""; + } + stream = terminalBlock.generate() + filterOp + "." + operation + "().orElse(" + startingValue + ")"; + } + + PsiLoopStatement loop = terminalBlock.getMainLoop(); - return replaceWithFindExtremum(loop, terminal.getExtremumHolder(), stream, PsiType.INT); // TODO type? + return replaceWithFindExtremum(loop, terminal.getExtremumHolder(), stream); } @@ -66,25 +96,132 @@ public class FindExtremumMigration extends BaseStreamApiMigration { StreamApiMigrationInspection.Operation operation = tb.getLastOperation(); StreamApiMigrationInspection.FilterOp filterOp = tryCast(operation, StreamApiMigrationInspection.FilterOp.class); if (filterOp != null) { - tb = tb.withoutLastOperation(); - if (tb == null) return null; - ExtremumTerminal terminal = extractSimpleCase(filterOp.getExpression(), statements, tb); + TerminalBlock block = tb.withoutLastOperation(); + if (block == null) return null; + ExtremumTerminal terminal = extractSimpleRefCase(filterOp.getExpression(), statements, block); if (terminal != null) return terminal; + ExtremumTerminal primitiveCase = extractSimplePrimitiveCase(filterOp.getExpression(), statements, block); + if (primitiveCase != null) return primitiveCase; } switch (statements.length) { - case 1: // if() .. else .. + case 1: // if() .. else if() .. + PsiStatement statement = statements[0]; + PsiIfStatement ifStatement = tryCast(statement, PsiIfStatement.class); + if (ifStatement == null) return null; + PsiExpression condition = ifStatement.getCondition(); + if (condition == null) return null; + PsiStatement thenBranch = ifStatement.getThenBranch(); + PsiStatement elseBranch = ifStatement.getElseBranch(); + ExtremumTerminal terminal = extractIfElseCase(condition, unwrapIfBranch(thenBranch), unwrapIfBranch(elseBranch), tb); + if (terminal != null) return terminal; break; - case 2: // if () .. if() .. + case 2: // TODO if () .. if() .. break; } return null; } + //It looks like repeating for refs, but can't understand how to generalize for now + @Nullable + private static ExtremumTerminal extractSimplePrimitiveCase(@NotNull PsiExpression filterExpression, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock) { + PsiBinaryExpression binaryExpression = tryCast(filterExpression, PsiBinaryExpression.class); + if (binaryExpression == null) return null; + Comparision comparision = extractComparision(binaryExpression); + if (comparision == null) return null; + KeySelector second = comparision.getSecond(); + KeySelector first = comparision.getFirst(); + if (!hasSuitableType(first.getVariable().getType()) || !hasSuitableType(second.getVariable().getType())) return null; + + Assignment[] assignments = extractAssignments(statements); + if (assignments == null || assignments.length != 1) return null; + Assignment assignment = assignments[0]; + PsiVariable extremumHolder = assignment.getVariable(); + + ControlFlowUtils.InitializerUsageStatus status = + ControlFlowUtils.getInitializerUsageStatus(extremumHolder, terminalBlock.getMainLoop()); + if (!status.equals(ControlFlowUtils.InitializerUsageStatus.DECLARED_JUST_BEFORE)) return null; // TODO can't it be weaker? + + PsiExpression initializer = extremumHolder.getInitializer(); + Object expressionInitializer = ExpressionUtils.computeConstantExpression(initializer); + if (expressionInitializer == null) return null; + // TODO use it in filtration + + final boolean isMax; + PsiVariable current; + if (extremumHolder.equals(comparision.getFirst().getVariable())) { + isMax = !comparision.isGreater(); + current = comparision.getSecond().getVariable(); + } + else if (extremumHolder.equals(comparision.getSecond().getVariable())) { + isMax = comparision.isGreater(); + current = comparision.getFirst().getVariable(); + } + else { + return null; + } + + //TODO check that maxHolder is same for comparision + + return new ExtremumTerminal(isMax, true, comparision.getFirst(), current, extremumHolder, terminalBlock, expressionInitializer); + } + + private static boolean hasSuitableType(@NotNull PsiType type) { + return type.equals(PsiType.INT) || type.equals(PsiType.LONG) || type.equals(PsiType.DOUBLE); + } + + @NotNull + private static PsiStatement[] unwrapIfBranch(@Nullable PsiStatement statement) { + PsiBlockStatement blockStatement = tryCast(statement, PsiBlockStatement.class); + if (blockStatement != null) { + return blockStatement.getCodeBlock().getStatements(); + } + return new PsiStatement[]{statement}; + } + + //if(maxPerson == null) { + // maxPerson = current; + //} else if (maxPerson.getAge() < person.getAge()) { + // maxPerson = current; + //} + @Nullable + private static ExtremumTerminal extractIfElseCase(@NotNull PsiExpression condition, + @NotNull PsiStatement[] thenStatements, + @NotNull PsiStatement[] elseStatements, + @NotNull TerminalBlock terminalBlock) { + PsiBinaryExpression conditionExpression = tryCast(condition, PsiBinaryExpression.class); + if (conditionExpression == null) return null; + PsiVariable extremumHolder = extractNullCheckingVar(conditionExpression); + if (extremumHolder == null) return null; + + if (thenStatements.length != 1) return null; + PsiStatement firstWayStatement = thenStatements[0]; + + if (elseStatements.length != 1) return null; + PsiStatement elseStatement = elseStatements[0]; + PsiIfStatement nestedIf = tryCast(elseStatement, PsiIfStatement.class); + if (nestedIf == null) return null; + PsiExpression nestedIfCondition = nestedIf.getCondition(); + if (nestedIfCondition == null) return null; + PsiStatement nestedThenBranch = nestedIf.getThenBranch(); + if (nestedThenBranch == null) return null; + PsiStatement nestedElseBranch = nestedIf.getElseBranch(); + if (nestedElseBranch != null) return null; + PsiStatement[] nestedElseStatements = unwrapIfBranch(nestedThenBranch); + if (nestedElseStatements.length != 1) return null; + PsiStatement maxReplacingStatement = nestedElseStatements[0]; + + + if (!ourEquivalence.statementsAreEquivalent(maxReplacingStatement, firstWayStatement)) return null; + return extractSimpleRefCaseOriented(conditionExpression, nestedIfCondition, nestedElseStatements, terminalBlock); + } + // maxPerson == null || maxPerson.getAge() < person.getAge() @Nullable - private static ExtremumTerminal extractSimpleCase(@NotNull PsiExpression filterExpression, - @NotNull PsiStatement[] statements, - @NotNull TerminalBlock terminalBlock) { + private static ExtremumTerminal extractSimpleRefCase(@NotNull PsiExpression filterExpression, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock) { PsiBinaryExpression binaryExpression = tryCast(filterExpression, PsiBinaryExpression.class); if (binaryExpression == null) return null; @@ -95,25 +232,25 @@ public class FindExtremumMigration extends BaseStreamApiMigration { PsiExpression lOperand = binaryExpression.getLOperand(); PsiExpression rOperand = binaryExpression.getROperand(); if(rOperand == null) return null; - ExtremumTerminal terminal = extractSimpleCaseOriented(lOperand, rOperand, statements, terminalBlock); + ExtremumTerminal terminal = extractSimpleRefCaseOriented(lOperand, rOperand, statements, terminalBlock); if(terminal != null) return terminal; - return extractSimpleCaseOriented(rOperand, lOperand, statements, terminalBlock); + return extractSimpleRefCaseOriented(rOperand, lOperand, statements, terminalBlock); } @Nullable - private static ExtremumTerminal extractSimpleCaseOriented(@NotNull PsiExpression first, - @NotNull PsiExpression second, - @NotNull PsiStatement[] statements, - @NotNull TerminalBlock terminalBlock) { - if (first instanceof PsiBinaryExpression) { - PsiVariable extremumHolder = extractNullCheckingVar((PsiBinaryExpression)first); - if (second instanceof PsiBinaryExpression && extremumHolder != null) { + private static ExtremumTerminal extractSimpleRefCaseOriented(@NotNull PsiExpression nullCheck, + @NotNull PsiExpression comparisionExpression, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock) { + if (nullCheck instanceof PsiBinaryExpression) { + PsiVariable extremumHolder = extractNullCheckingVar((PsiBinaryExpression)nullCheck); + if (comparisionExpression instanceof PsiBinaryExpression && extremumHolder != null) { - Comparision comparision = extractComparision((PsiBinaryExpression)second); + Comparision comparision = extractComparision((PsiBinaryExpression)comparisionExpression); if (comparision == null) return null; Assignment[] assignments = extractAssignments(statements); if (assignments == null) return null; - return extractExtremumTerminal(comparision, assignments, extremumHolder, terminalBlock); + return extractRefExtremumTerminal(comparision, assignments, extremumHolder, terminalBlock); } } return null; @@ -160,14 +297,16 @@ public class FindExtremumMigration extends BaseStreamApiMigration { } @Nullable - private static ExtremumTerminal extractExtremumTerminal(@NotNull Comparision comparision, - @NotNull Assignment[] assignments, - @NotNull PsiVariable nullCheckedHolder, - @NotNull TerminalBlock terminalBlock) { + private static ExtremumTerminal extractRefExtremumTerminal(@NotNull Comparision comparision, + @NotNull Assignment[] assignments, + @NotNull PsiVariable nullCheckedHolder, + @NotNull TerminalBlock terminalBlock) { PsiExpression initializer = nullCheckedHolder.getInitializer(); if (initializer == null || !PsiType.NULL.equals(initializer.getType())) return null; - //TODO control flow? how to understand if it didn't change? + ControlFlowUtils.InitializerUsageStatus status = + ControlFlowUtils.getInitializerUsageStatus(nullCheckedHolder, terminalBlock.getMainLoop()); + if (!status.equals(ControlFlowUtils.InitializerUsageStatus.DECLARED_JUST_BEFORE)) return null; // TODO can't it be weaker? final boolean isMax; final PsiVariable comparisionExtremumHolder; @@ -189,17 +328,20 @@ public class FindExtremumMigration extends BaseStreamApiMigration { return null; } + PsiType lambdaType = comparisionKeySelector.acceptingType(); + if (!hasSuitableType(lambdaType)) return null; + if (assignments.length == 1) { Assignment assignment = assignments[0]; - if (!assignment.getExtremumHolder().equals(nullCheckedHolder)) return null; + if (!assignment.getVariable().equals(nullCheckedHolder)) return null; if (assignment.hasSameVariables(comparisionExtremumHolder, comparisionCurrent)) return null; - return new ExtremumTerminal(isMax, comparisionKeySelector, comparisionCurrent, comparisionExtremumHolder, terminalBlock, null); + return new ExtremumTerminal(isMax, false, comparisionKeySelector, comparisionCurrent, comparisionExtremumHolder, terminalBlock, null); } else if (assignments.length == 2) { //if(max == null || maxAge < current.getAge()) {max = Assignment first = assignments[0]; Assignment second = assignments[1]; - if (first.getExtremumHolder().equals(nullCheckedHolder) && first.hasSameVariables(comparisionExtremumHolder, comparisionCurrent)) { + if (first.getVariable().equals(nullCheckedHolder) && first.hasSameVariables(comparisionExtremumHolder, comparisionCurrent)) { KeySelector assignmentKeySelector = KeySelector.extractKeySelector(second.getExpression()); if (assignmentKeySelector != null && comparisionKeySelector.equals(assignmentKeySelector)) { PsiVariable keyExtremumHolder = assignmentKeySelector.getVariable(); @@ -251,6 +393,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @Nullable private static PsiMethod resolveMethod(@NotNull PsiExpression expression) { PsiMethodCallExpression methodCallExpression = tryCast(expression, PsiMethodCallExpression.class); + if (methodCallExpression == null) return null; PsiReferenceExpression methodExpression = methodCallExpression.getMethodExpression(); PsiElement resolvedMethod = methodExpression.resolve(); return tryCast(resolvedMethod, PsiMethod.class); @@ -288,12 +431,23 @@ public class FindExtremumMigration extends BaseStreamApiMigration { * Used to create Comparator */ interface KeySelector { + /** + * @param varName that can be used in comparator lambda + * @return lambda text to create comparator + */ @NotNull - String getLambdaText(@NotNull PsiVariable variable); + String getLambdaText(@NotNull String varName); + + /** + * @return type of comparator function + */ @NotNull PsiType acceptingType(); + /** + * @return variable used in original key selection expression + */ @NotNull PsiVariable getVariable(); @@ -301,6 +455,8 @@ public class FindExtremumMigration extends BaseStreamApiMigration { static KeySelector extractKeySelector(@NotNull PsiExpression expression) { MethodKeySelector methodKeySelector = MethodKeySelector.extract(expression); if (methodKeySelector != null) return methodKeySelector; + FieldKeySelector fieldKeySelector = FieldKeySelector.extract(expression); + if (fieldKeySelector != null) return fieldKeySelector; VariableKeySelector variableKeySelector = VariableKeySelector.extract(expression); if (variableKeySelector != null) return variableKeySelector; return null; @@ -326,7 +482,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @NotNull @Override - public String getLambdaText(@NotNull PsiVariable variable) { + public String getLambdaText(@NotNull String varName) { return myContainingClass.getQualifiedName() + "::" + myMethod.getName(); } @@ -368,7 +524,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @NotNull @Override - public String getLambdaText(@NotNull PsiVariable variable) { + public String getLambdaText(@NotNull String varName) { String variableText = myVariable.getText(); return variableText + "->" + variableText; } @@ -385,26 +541,80 @@ public class FindExtremumMigration extends BaseStreamApiMigration { return myVariable; } + @Override + public boolean equals(Object obj) { + return obj instanceof VariableKeySelector; + } + @Nullable static VariableKeySelector extract(@NotNull PsiExpression expression) { - PsiVariable variable = tryCast(expression, PsiVariable.class); + PsiReferenceExpression referenceExpression = tryCast(expression, PsiReferenceExpression.class); + if (referenceExpression == null) return null; + PsiVariable variable = tryCast(referenceExpression.resolve(), PsiVariable.class); if (variable == null) return null; return new VariableKeySelector(variable); } } + private static class FieldKeySelector implements KeySelector { + private final @NotNull PsiField myField; + private final @NotNull PsiVariable myVariable; + + private FieldKeySelector(@NotNull PsiField field, @NotNull PsiVariable variable) { + myField = field; + myVariable = variable; + } + + @NotNull + @Override + public String getLambdaText(@NotNull String varName) { + return varName + "->" + varName + "." + myField.getName(); + } + + @NotNull + @Override + public PsiType acceptingType() { + return myField.getType(); + } + + @NotNull + @Override + public PsiVariable getVariable() { + return myVariable; + } + + @Override + public boolean equals(Object obj) { + return obj instanceof FieldKeySelector && ((FieldKeySelector)obj).myField.equals(this.myField); + } + + @Nullable + static FieldKeySelector extract(@NotNull PsiExpression expression) { + PsiReferenceExpression referenceExpression = tryCast(expression, PsiReferenceExpression.class); + if (referenceExpression == null) return null; + PsiField field = tryCast(referenceExpression.resolve(), PsiField.class); + if (field == null) return null; + PsiElement qualifier = referenceExpression.getQualifier(); + PsiReference reference = tryCast(qualifier, PsiReference.class); + if (reference == null) return null; + PsiVariable variable = tryCast(reference.resolve(), PsiVariable.class); + if (variable == null) return null; + return new FieldKeySelector(field, variable); + } + } + private static class Assignment { - private final @NotNull PsiVariable myExtremumHolder; + private final @NotNull PsiVariable myVariable; private final @NotNull PsiExpression myExpression; - private Assignment(@NotNull PsiVariable extremumHolder, @NotNull PsiExpression expression) { - myExtremumHolder = extremumHolder; + private Assignment(@NotNull PsiVariable variable, @NotNull PsiExpression expression) { + myVariable = variable; myExpression = expression; } @NotNull - public PsiVariable getExtremumHolder() { - return myExtremumHolder; + public PsiVariable getVariable() { + return myVariable; } @NotNull @@ -412,9 +622,16 @@ public class FindExtremumMigration extends BaseStreamApiMigration { return myExpression; } + @Override + public int hashCode() { + int result = myVariable.hashCode(); + result = 31 * result + myExpression.hashCode(); + return result; + } + private boolean hasSameVariables(@NotNull PsiVariable extremumHolder, @NotNull PsiVariable current) { PsiVariable rVariable = tryCast(myExpression, PsiVariable.class); - return rVariable != null & myExtremumHolder.equals(extremumHolder) && rVariable.equals(current); + return rVariable != null & myVariable.equals(extremumHolder) && rVariable.equals(current); } } @@ -433,10 +650,12 @@ public class FindExtremumMigration extends BaseStreamApiMigration { return myIsGreater; } + @NotNull public KeySelector getSecond() { return mySecond; } + @NotNull public KeySelector getFirst() { return myFirst; } @@ -444,19 +663,21 @@ public class FindExtremumMigration extends BaseStreamApiMigration { static class ExtremumTerminal { private final boolean myIsMax; + private final boolean myIsPrimitive; private final @NotNull KeySelector myKeySelector; // field or method private final @NotNull PsiVariable myCurrentVariable; private final @NotNull PsiVariable myExtremumHolder; private final @NotNull TerminalBlock myTerminalBlock; - private final @Nullable PsiExpression myStartingValue; + private final @Nullable Object myStartingValue; public ExtremumTerminal(boolean isMax, - @NotNull KeySelector keySelector, + boolean isPrimitive, @NotNull KeySelector keySelector, @NotNull PsiVariable currentVariable, @NotNull PsiVariable extremumHolder, @NotNull TerminalBlock terminalBlock, - @Nullable PsiExpression startingValue) { + @Nullable Object startingValue) { myIsMax = isMax; + myIsPrimitive = isPrimitive; myKeySelector = keySelector; myCurrentVariable = currentVariable; myExtremumHolder = extremumHolder; @@ -484,7 +705,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { } @Nullable - public PsiExpression getStartingValue() { + public Object getStartingValue() { return myStartingValue; } @@ -492,5 +713,9 @@ public class FindExtremumMigration extends BaseStreamApiMigration { public TerminalBlock getTerminalBlock() { return myTerminalBlock; } + + public boolean isPrimitive() { + return myIsPrimitive; + } } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java new file mode 100644 index 000000000000..0bf6af670677 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java @@ -0,0 +1,9 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + public Person max(int[] ints) { + int max = Arrays.stream(ints).filter(anInt -> anInt < 10).filter(anInt -> anInt >= 0).max().orElse(0); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceField.java new file mode 100644 index 000000000000..9006abcbf36c --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceField.java @@ -0,0 +1,34 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(p -> p.age)).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitive.java new file mode 100644 index 000000000000..01d5d7501666 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitive.java @@ -0,0 +1,16 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + public Person max(int[] ints) { + int max = 0; + for (int anInt : ints) { + if(anInt < 10) { + if(max < anInt) { + max = anInt; + } + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceField.java new file mode 100644 index 000000000000..99351d7f6c65 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceField.java @@ -0,0 +1,41 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (p.age > maxPerson.age || maxPerson == null) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceShortMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceShortMethod.java new file mode 100644 index 000000000000..fdc21e6b629d --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceShortMethod.java @@ -0,0 +1,41 @@ +// "Replace with max()" "false" + +import java.util.*; + +public class Main { + static class Person { + String name; + short age; + + public String getName() { + return name; + } + + public short getAge() { + return age; + } + + public Person(String name, short age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (p.getAge() > maxPerson.getAge() || maxPerson == null) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file From 8a91ce41e147f71dcbbda7ec4d0d95f233d5b35a Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Tue, 25 Jul 2017 13:04:40 +0700 Subject: [PATCH 06/28] minor refactoring --- .../FindExtremumMigration.java | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index a3eb154a9716..4ec52a1642c3 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -64,6 +64,17 @@ public class FindExtremumMigration extends BaseStreamApiMigration { TerminalBlock terminalBlock = terminal.getTerminalBlock(); + String stream = createStreamText(terminal, operation, comparator, name, terminalBlock); + PsiLoopStatement loop = terminalBlock.getMainLoop(); + return replaceWithFindExtremum(loop, terminal.getExtremumHolder(), stream); + } + + @NotNull + private String createStreamText(ExtremumTerminal terminal, + String operation, + String comparator, + String name, + TerminalBlock terminalBlock) { String stream; if (!terminal.isPrimitive()) { stream = terminalBlock.generate() + "." + operation + "(" + comparator + ").orElse(null)"; @@ -74,7 +85,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { if (terminal.getStartingValue() != null) { startingValue = terminal.getStartingValue().toString(); String inFilterOperation = terminal.isMax() ? ">=" : "<="; - filterOp = ".filter("+ name+"->" + name + inFilterOperation + terminal.getStartingValue().toString() + ")"; + filterOp = ".filter(" + name + "->" + name + inFilterOperation + terminal.getStartingValue().toString() + ")"; } else { startingValue = ""; @@ -82,11 +93,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { } stream = terminalBlock.generate() + filterOp + "." + operation + "().orElse(" + startingValue + ")"; } - - - PsiLoopStatement loop = terminalBlock.getMainLoop(); - - return replaceWithFindExtremum(loop, terminal.getExtremumHolder(), stream); + return stream; } @@ -146,7 +153,6 @@ public class FindExtremumMigration extends BaseStreamApiMigration { PsiExpression initializer = extremumHolder.getInitializer(); Object expressionInitializer = ExpressionUtils.computeConstantExpression(initializer); if (expressionInitializer == null) return null; - // TODO use it in filtration final boolean isMax; PsiVariable current; @@ -231,9 +237,9 @@ public class FindExtremumMigration extends BaseStreamApiMigration { } PsiExpression lOperand = binaryExpression.getLOperand(); PsiExpression rOperand = binaryExpression.getROperand(); - if(rOperand == null) return null; + if (rOperand == null) return null; ExtremumTerminal terminal = extractSimpleRefCaseOriented(lOperand, rOperand, statements, terminalBlock); - if(terminal != null) return terminal; + if (terminal != null) return terminal; return extractSimpleRefCaseOriented(rOperand, lOperand, statements, terminalBlock); } @@ -261,7 +267,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { if (type.equals(PsiType.INT)) return "comparingInt"; if (type.equals(PsiType.DOUBLE)) return "comparingDouble"; if (type.equals(PsiType.LONG)) return "comparingLong"; - return null; // TODO more precise handling + return null; } @Nullable From 81f04a90d7fcd47defc40ed1f05e6fef22b04805 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Tue, 25 Jul 2017 13:07:33 +0700 Subject: [PATCH 07/28] minor refactoring --- .../streamMigration/FindExtremumMigration.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 4ec52a1642c3..2319e1d380eb 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -70,11 +70,11 @@ public class FindExtremumMigration extends BaseStreamApiMigration { } @NotNull - private String createStreamText(ExtremumTerminal terminal, - String operation, - String comparator, - String name, - TerminalBlock terminalBlock) { + private static String createStreamText(ExtremumTerminal terminal, + String operation, + String comparator, + String name, + TerminalBlock terminalBlock) { String stream; if (!terminal.isPrimitive()) { stream = terminalBlock.generate() + "." + operation + "(" + comparator + ").orElse(null)"; @@ -351,9 +351,9 @@ public class FindExtremumMigration extends BaseStreamApiMigration { KeySelector assignmentKeySelector = KeySelector.extractKeySelector(second.getExpression()); if (assignmentKeySelector != null && comparisionKeySelector.equals(assignmentKeySelector)) { PsiVariable keyExtremumHolder = assignmentKeySelector.getVariable(); - if (keyExtremumHolder.equals(comparisionCurrent)) { - - } + //if (keyExtremumHolder.equals(comparisionCurrent)) { + // + //} //TODO } } From 83b34eb95e58c390f559c054cbe9473058643ce6 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Tue, 25 Jul 2017 13:53:39 +0700 Subject: [PATCH 08/28] minor refactoring : IDEA-CR-23237 --- .../FindExtremumMigration.java | 64 +++++++++++++------ .../minMax/afterMaxPrimitive.java | 2 +- ...beforeMaxPrimitiveNonCycleComparision.java | 17 +++++ .../beforeMaxPrimitiveNonCycleVariable.java | 17 +++++ 4 files changed, 78 insertions(+), 22 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleComparision.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleVariable.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 2319e1d380eb..20f89fbc8c85 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -75,25 +75,21 @@ public class FindExtremumMigration extends BaseStreamApiMigration { String comparator, String name, TerminalBlock terminalBlock) { - String stream; if (!terminal.isPrimitive()) { - stream = terminalBlock.generate() + "." + operation + "(" + comparator + ").orElse(null)"; + return terminalBlock.generate() + "." + operation + "(" + comparator + ").orElse(null)"; + } + String startingValue; + String filterOp; + if (terminal.getStartingValue() != null) { + startingValue = terminal.getStartingValue().toString(); + String inFilterOperation = terminal.isMax() ? ">=" : "<="; + filterOp = ".filter(" + name + "->" + name + inFilterOperation + terminal.getStartingValue().toString() + ")"; } else { - String startingValue; - String filterOp; - if (terminal.getStartingValue() != null) { - startingValue = terminal.getStartingValue().toString(); - String inFilterOperation = terminal.isMax() ? ">=" : "<="; - filterOp = ".filter(" + name + "->" + name + inFilterOperation + terminal.getStartingValue().toString() + ")"; - } - else { - startingValue = ""; - filterOp = ""; - } - stream = terminalBlock.generate() + filterOp + "." + operation + "().orElse(" + startingValue + ")"; + startingValue = ""; + filterOp = ""; } - return stream; + return terminalBlock.generate() + filterOp + "." + operation + "().orElse(" + startingValue + ")"; } @@ -156,19 +152,29 @@ public class FindExtremumMigration extends BaseStreamApiMigration { final boolean isMax; PsiVariable current; + PsiVariable comparisionExtrmumHolder; + PsiVariable comparisionLoopVariable; if (extremumHolder.equals(comparision.getFirst().getVariable())) { isMax = !comparision.isGreater(); current = comparision.getSecond().getVariable(); + comparisionExtrmumHolder = comparision.getFirst().getVariable(); + comparisionLoopVariable = comparision.getSecond().getVariable(); } else if (extremumHolder.equals(comparision.getSecond().getVariable())) { isMax = comparision.isGreater(); current = comparision.getFirst().getVariable(); + comparisionExtrmumHolder = comparision.getSecond().getVariable(); + comparisionLoopVariable = comparision.getFirst().getVariable(); } else { return null; } - //TODO check that maxHolder is same for comparision + PsiVariable assignmentLoopVariable = assignment.tryExtractVariable(); + if (assignmentLoopVariable == null || !assignmentLoopVariable.equals(comparisionLoopVariable)) return null; + //TODO check if it is really loop variable or use knowledge of non final variables + + if(!comparisionExtrmumHolder.equals(extremumHolder)) return null; return new ExtremumTerminal(isMax, true, comparision.getFirst(), current, extremumHolder, terminalBlock, expressionInitializer); } @@ -457,6 +463,8 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @NotNull PsiVariable getVariable(); + boolean equalShape(@NotNull KeySelector keySelector); + @Nullable static KeySelector extractKeySelector(@NotNull PsiExpression expression) { MethodKeySelector methodKeySelector = MethodKeySelector.extract(expression); @@ -505,8 +513,8 @@ public class FindExtremumMigration extends BaseStreamApiMigration { } @Override - public boolean equals(Object obj) { - return obj instanceof MethodKeySelector && ((MethodKeySelector)obj).myMethod == myMethod; + public boolean equalShape(@NotNull KeySelector keySelector) { + return keySelector instanceof MethodKeySelector && ((MethodKeySelector)keySelector).myMethod.equals(myMethod); } @Nullable @@ -548,8 +556,8 @@ public class FindExtremumMigration extends BaseStreamApiMigration { } @Override - public boolean equals(Object obj) { - return obj instanceof VariableKeySelector; + public boolean equalShape(@NotNull KeySelector keySelector) { + return keySelector instanceof VariableKeySelector; } @Nullable @@ -591,7 +599,12 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @Override public boolean equals(Object obj) { - return obj instanceof FieldKeySelector && ((FieldKeySelector)obj).myField.equals(this.myField); + return obj instanceof FieldKeySelector && ((FieldKeySelector)obj).myField.equals(myField); + } + + @Override + public boolean equalShape(@NotNull KeySelector keySelector) { + return keySelector instanceof FieldKeySelector && ((FieldKeySelector)keySelector).myField.equals(myField); } @Nullable @@ -639,6 +652,15 @@ public class FindExtremumMigration extends BaseStreamApiMigration { PsiVariable rVariable = tryCast(myExpression, PsiVariable.class); return rVariable != null & myVariable.equals(extremumHolder) && rVariable.equals(current); } + + @Nullable + public PsiVariable tryExtractVariable(){ + PsiReferenceExpression referenceExpression = tryCast(myExpression, PsiReferenceExpression.class); + if(referenceExpression == null) return null; + PsiVariable variable = tryCast(referenceExpression.resolve(), PsiVariable.class); + if(variable == null) return null; + return variable; + } } static class Comparision { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java index 0bf6af670677..8daf18a2db80 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java @@ -3,7 +3,7 @@ import java.util.*; public class Main { - public Person max(int[] ints) { + public void max(int[] ints) { int max = Arrays.stream(ints).filter(anInt -> anInt < 10).filter(anInt -> anInt >= 0).max().orElse(0); } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleComparision.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleComparision.java new file mode 100644 index 000000000000..afa5c4c21a66 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleComparision.java @@ -0,0 +1,17 @@ +// "Replace with max()" "false" + +import java.util.*; + +public class Main { + public void max(int[] ints) { + int another; + int max = 0; + for (int anInt : ints) { + if(anInt < 10) { + if(max < another) { + max = anInt; + } + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleVariable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleVariable.java new file mode 100644 index 000000000000..595066150c08 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleVariable.java @@ -0,0 +1,17 @@ +// "Replace with max()" "false" + +import java.util.*; + +public class Main { + public void max(int[] ints) { + int another; + int max = 0; + for (int anInt : ints) { + if(anInt < 10) { + if(max < another) { + max = another; + } + } + } + } +} \ No newline at end of file From abe1b56e7b25aacf4424929f28f8f189f917fcf8 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Tue, 25 Jul 2017 13:57:11 +0700 Subject: [PATCH 09/28] minor refactoring : IDEA-CR-23237 --- .../FindExtremumMigration.java | 48 ++++++++----------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 20f89fbc8c85..35f67c279bc2 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -50,7 +50,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { String comparator; KeySelector keySelector = terminal.getKeySelector(); PsiVariable currentVariable = - terminal.getCurrentVariable(); + terminal.getLoopVariable(); JavaCodeStyleManager javaStyle = JavaCodeStyleManager.getInstance(project); String name = currentVariable.getName(); @@ -151,18 +151,18 @@ public class FindExtremumMigration extends BaseStreamApiMigration { if (expressionInitializer == null) return null; final boolean isMax; - PsiVariable current; + PsiVariable loopVariable; PsiVariable comparisionExtrmumHolder; PsiVariable comparisionLoopVariable; if (extremumHolder.equals(comparision.getFirst().getVariable())) { isMax = !comparision.isGreater(); - current = comparision.getSecond().getVariable(); + loopVariable = comparision.getSecond().getVariable(); comparisionExtrmumHolder = comparision.getFirst().getVariable(); comparisionLoopVariable = comparision.getSecond().getVariable(); } else if (extremumHolder.equals(comparision.getSecond().getVariable())) { isMax = comparision.isGreater(); - current = comparision.getFirst().getVariable(); + loopVariable = comparision.getFirst().getVariable(); comparisionExtrmumHolder = comparision.getSecond().getVariable(); comparisionLoopVariable = comparision.getFirst().getVariable(); } @@ -176,7 +176,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { if(!comparisionExtrmumHolder.equals(extremumHolder)) return null; - return new ExtremumTerminal(isMax, true, comparision.getFirst(), current, extremumHolder, terminalBlock, expressionInitializer); + return new ExtremumTerminal(isMax, true, comparision.getFirst(), loopVariable, extremumHolder, terminalBlock, expressionInitializer); } private static boolean hasSuitableType(@NotNull PsiType type) { @@ -322,18 +322,18 @@ public class FindExtremumMigration extends BaseStreamApiMigration { final boolean isMax; final PsiVariable comparisionExtremumHolder; - final PsiVariable comparisionCurrent; + final PsiVariable comparisionLoopVar; final KeySelector comparisionKeySelector; if (comparision.getFirst().getVariable().equals(nullCheckedHolder)) { isMax = !comparision.isGreater(); comparisionExtremumHolder = comparision.getFirst().getVariable(); - comparisionCurrent = comparision.getSecond().getVariable(); + comparisionLoopVar = comparision.getSecond().getVariable(); comparisionKeySelector = comparision.getFirst(); } else if (comparision.getSecond().getVariable().equals(nullCheckedHolder)) { isMax = comparision.isGreater(); comparisionExtremumHolder = comparision.getSecond().getVariable(); - comparisionCurrent = comparision.getFirst().getVariable(); + comparisionLoopVar = comparision.getFirst().getVariable(); comparisionKeySelector = comparision.getSecond(); } else { @@ -346,18 +346,18 @@ public class FindExtremumMigration extends BaseStreamApiMigration { if (assignments.length == 1) { Assignment assignment = assignments[0]; if (!assignment.getVariable().equals(nullCheckedHolder)) return null; - if (assignment.hasSameVariables(comparisionExtremumHolder, comparisionCurrent)) return null; - return new ExtremumTerminal(isMax, false, comparisionKeySelector, comparisionCurrent, comparisionExtremumHolder, terminalBlock, null); + if (assignment.hasSameVariables(comparisionExtremumHolder, comparisionLoopVar)) return null; + return new ExtremumTerminal(isMax, false, comparisionKeySelector, comparisionLoopVar, comparisionExtremumHolder, terminalBlock, null); } else if (assignments.length == 2) { //if(max == null || maxAge < current.getAge()) {max = Assignment first = assignments[0]; Assignment second = assignments[1]; - if (first.getVariable().equals(nullCheckedHolder) && first.hasSameVariables(comparisionExtremumHolder, comparisionCurrent)) { + if (first.getVariable().equals(nullCheckedHolder) && first.hasSameVariables(comparisionExtremumHolder, comparisionLoopVar)) { KeySelector assignmentKeySelector = KeySelector.extractKeySelector(second.getExpression()); if (assignmentKeySelector != null && comparisionKeySelector.equals(assignmentKeySelector)) { PsiVariable keyExtremumHolder = assignmentKeySelector.getVariable(); - //if (keyExtremumHolder.equals(comparisionCurrent)) { + //if (keyExtremumHolder.equals(comparisionLoopVar)) { // //} //TODO @@ -476,7 +476,6 @@ public class FindExtremumMigration extends BaseStreamApiMigration { return null; } } - // static class MethodKeySelector implements KeySelector { private final @NotNull PsiMethod myMethod; @@ -641,16 +640,9 @@ public class FindExtremumMigration extends BaseStreamApiMigration { return myExpression; } - @Override - public int hashCode() { - int result = myVariable.hashCode(); - result = 31 * result + myExpression.hashCode(); - return result; - } - - private boolean hasSameVariables(@NotNull PsiVariable extremumHolder, @NotNull PsiVariable current) { + private boolean hasSameVariables(@NotNull PsiVariable extremumHolder, @NotNull PsiVariable loopVar) { PsiVariable rVariable = tryCast(myExpression, PsiVariable.class); - return rVariable != null & myVariable.equals(extremumHolder) && rVariable.equals(current); + return rVariable != null & myVariable.equals(extremumHolder) && rVariable.equals(loopVar); } @Nullable @@ -692,22 +684,22 @@ public class FindExtremumMigration extends BaseStreamApiMigration { static class ExtremumTerminal { private final boolean myIsMax; private final boolean myIsPrimitive; - private final @NotNull KeySelector myKeySelector; // field or method - private final @NotNull PsiVariable myCurrentVariable; + private final @NotNull KeySelector myKeySelector; + private final @NotNull PsiVariable myLoopVariable; private final @NotNull PsiVariable myExtremumHolder; private final @NotNull TerminalBlock myTerminalBlock; private final @Nullable Object myStartingValue; public ExtremumTerminal(boolean isMax, boolean isPrimitive, @NotNull KeySelector keySelector, - @NotNull PsiVariable currentVariable, + @NotNull PsiVariable loopVariable, @NotNull PsiVariable extremumHolder, @NotNull TerminalBlock terminalBlock, @Nullable Object startingValue) { myIsMax = isMax; myIsPrimitive = isPrimitive; myKeySelector = keySelector; - myCurrentVariable = currentVariable; + myLoopVariable = loopVariable; myExtremumHolder = extremumHolder; myStartingValue = startingValue; myTerminalBlock = terminalBlock; @@ -723,8 +715,8 @@ public class FindExtremumMigration extends BaseStreamApiMigration { } @NotNull - public PsiVariable getCurrentVariable() { - return myCurrentVariable; + public PsiVariable getLoopVariable() { + return myLoopVariable; } @NotNull From bbed739938fad82fb4c7f5e39a87a5e983c6fae6 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Tue, 25 Jul 2017 14:09:06 +0700 Subject: [PATCH 10/28] fix selector shape comparision : IDEA-CR-23237 --- .../streamMigration/FindExtremumMigration.java | 6 +++--- .../minMax/afterMaxPrimitive.java | 2 +- .../minMax/afterMinPrimitive.java | 9 +++++++++ .../minMax/beforeMaxPrimitive.java | 2 +- .../minMax/beforeMinPrimitive.java | 16 ++++++++++++++++ 5 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitive.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitive.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 35f67c279bc2..08940188f979 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -314,7 +314,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @NotNull PsiVariable nullCheckedHolder, @NotNull TerminalBlock terminalBlock) { PsiExpression initializer = nullCheckedHolder.getInitializer(); - if (initializer == null || !PsiType.NULL.equals(initializer.getType())) return null; + if (initializer == null || !PsiType.NULL.equals(initializer.getType())) return null; // TODO constant expression? ControlFlowUtils.InitializerUsageStatus status = ControlFlowUtils.getInitializerUsageStatus(nullCheckedHolder, terminalBlock.getMainLoop()); @@ -355,7 +355,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { Assignment second = assignments[1]; if (first.getVariable().equals(nullCheckedHolder) && first.hasSameVariables(comparisionExtremumHolder, comparisionLoopVar)) { KeySelector assignmentKeySelector = KeySelector.extractKeySelector(second.getExpression()); - if (assignmentKeySelector != null && comparisionKeySelector.equals(assignmentKeySelector)) { + if (assignmentKeySelector != null && comparisionKeySelector.equalShape(assignmentKeySelector)) { PsiVariable keyExtremumHolder = assignmentKeySelector.getVariable(); //if (keyExtremumHolder.equals(comparisionLoopVar)) { // @@ -389,7 +389,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { private static Comparision extractComparision(@NotNull PsiExpression first, @NotNull PsiExpression second, boolean isGreater) { KeySelector firstSelector = KeySelector.extractKeySelector(first); KeySelector secondSelector = KeySelector.extractKeySelector(second); - if (firstSelector == null || secondSelector == null || !firstSelector.equals(secondSelector)) return null; + if (firstSelector == null || secondSelector == null || !firstSelector.equalShape(secondSelector)) return null; return new Comparision(firstSelector, secondSelector, isGreater); } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java index 8daf18a2db80..46924fb60f32 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java @@ -3,7 +3,7 @@ import java.util.*; public class Main { - public void max(int[] ints) { + public void work(int[] ints) { int max = Arrays.stream(ints).filter(anInt -> anInt < 10).filter(anInt -> anInt >= 0).max().orElse(0); } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitive.java new file mode 100644 index 000000000000..d69c05c2e2d0 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitive.java @@ -0,0 +1,9 @@ +// "Replace with min()" "true" + +import java.util.*; + +public class Main { + public void work(int[] ints) { + int min = Arrays.stream(ints).filter(anInt -> anInt < 10).filter(anInt -> anInt <= 0).min().orElse(0); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitive.java index 01d5d7501666..4b90197bc970 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitive.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitive.java @@ -3,7 +3,7 @@ import java.util.*; public class Main { - public Person max(int[] ints) { + public void work(int[] ints) { int max = 0; for (int anInt : ints) { if(anInt < 10) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitive.java new file mode 100644 index 000000000000..f8499ba73721 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitive.java @@ -0,0 +1,16 @@ +// "Replace with min()" "true" + +import java.util.*; + +public class Main { + public void work(int[] ints) { + int min = 0; + for (int anInt : ints) { + if(anInt < 10) { + if(min > anInt) { + min = anInt; + } + } + } + } +} \ No newline at end of file From 972b1e10244b389f547ae7432acd9d8ede5a1d54 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Thu, 27 Jul 2017 10:34:35 +0700 Subject: [PATCH 11/28] refactor code : IDEA-CR-23237 --- .../BaseStreamApiMigration.java | 11 +- .../FindExtremumMigration.java | 1034 ++++++++++------- .../StreamApiMigrationInspection.java | 4 +- .../minMax/afterMaxReferenceTmp.java | 34 + .../beforeMaxPrimitiveNonCycleVariable.java | 2 +- .../minMax/beforeMaxReferenceTmp.java | 43 + 6 files changed, 697 insertions(+), 431 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmp.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceTmp.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java index 3441a056f780..2890796a2098 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java @@ -22,6 +22,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.siyeh.ig.psiutils.ControlFlowUtils; import com.siyeh.ig.psiutils.ControlFlowUtils.InitializerUsageStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author Tagir Valeev @@ -88,12 +89,16 @@ abstract class BaseStreamApiMigration { } - static PsiElement replaceWithFindExtremum(PsiLoopStatement loopStatement, - PsiVariable extremumHolder, - String streamText) { + static PsiElement replaceWithFindExtremum(@NotNull PsiLoopStatement loopStatement, + @NotNull PsiVariable extremumHolder, + @NotNull String streamText, + @Nullable PsiVariable keyExtremum) { PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(loopStatement.getProject()); restoreComments(loopStatement, loopStatement.getBody()); removeLoop(loopStatement); + if(keyExtremum != null) { + keyExtremum.delete(); // TODO check this + } PsiExpression initializer = extremumHolder.getInitializer(); if(initializer != null) { PsiExpression streamExpression = elementFactory.createExpressionFromText(streamText, extremumHolder); // TODO cast expression if needed diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 08940188f979..6ed0de331564 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -15,6 +15,7 @@ */ package com.intellij.codeInspection.streamMigration; + import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.codeStyle.JavaCodeStyleManager; @@ -27,9 +28,6 @@ import org.jetbrains.annotations.Nullable; import static com.intellij.util.ObjectUtils.tryCast; -/** - * Created by Roman Ivanov. - */ public class FindExtremumMigration extends BaseStreamApiMigration { static final String MAX_REPLACEMENT = "max()"; @@ -41,231 +39,55 @@ public class FindExtremumMigration extends BaseStreamApiMigration { super(shouldWarn, replacement); } - @Override PsiElement migrate(@NotNull Project project, @NotNull PsiStatement body, @NotNull TerminalBlock tb) { - ExtremumTerminal terminal = extractExtremumTerminal(tb); + ExtremumTerminal terminal = extract(tb); if (terminal == null) return null; String operation = terminal.isMax() ? "max" : "min"; - String comparator; + KeySelector keySelector = terminal.getKeySelector(); PsiVariable currentVariable = terminal.getLoopVariable(); - JavaCodeStyleManager javaStyle = JavaCodeStyleManager.getInstance(project); String name = currentVariable.getName(); if (name == null) name = "x"; javaStyle.suggestUniqueVariableName(name, body, true); - String lambdaText = keySelector.getLambdaText(name); - PsiType lambdaReturnType = keySelector.acceptingType(); + String lambdaText = keySelector.buildLambda(name); + PsiType lambdaReturnType = keySelector.selectedKeyType(); String comparingMethod = getComparingMethod(lambdaReturnType); if (comparingMethod == null) return null; - comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + comparingMethod + "(" + lambdaText + ")"; + String comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + comparingMethod + "(" + lambdaText + ")"; TerminalBlock terminalBlock = terminal.getTerminalBlock(); - String stream = createStreamText(terminal, operation, comparator, name, terminalBlock); + String stream = buildStreamText(terminal, operation, comparator, name, terminalBlock); PsiLoopStatement loop = terminalBlock.getMainLoop(); - return replaceWithFindExtremum(loop, terminal.getExtremumHolder(), stream); + return replaceWithFindExtremum(loop, terminal.getExtremumHolder(), stream, terminal.getKeyExtremum()); } @NotNull - private static String createStreamText(ExtremumTerminal terminal, - String operation, - String comparator, - String name, - TerminalBlock terminalBlock) { - if (!terminal.isPrimitive()) { - return terminalBlock.generate() + "." + operation + "(" + comparator + ").orElse(null)"; - } + String buildStreamText(@NotNull ExtremumTerminal terminal, + @NotNull String operation, + @NotNull String comparator, + @NotNull String varName, + @NotNull TerminalBlock terminalBlock) { String startingValue; String filterOp; - if (terminal.getStartingValue() != null) { - startingValue = terminal.getStartingValue().toString(); + if (terminal.getKeySelectorInitializer() != null) { + PsiExpression initializer = terminal.getKeySelectorInitializer(); + startingValue = initializer.getText(); + String keySelectorText = terminal.getKeySelector().buildExpression(varName).getText(); String inFilterOperation = terminal.isMax() ? ">=" : "<="; - filterOp = ".filter(" + name + "->" + name + inFilterOperation + terminal.getStartingValue().toString() + ")"; + filterOp = ".filter(" + varName + "->" + keySelectorText + inFilterOperation + startingValue + ")"; } else { startingValue = ""; filterOp = ""; } - return terminalBlock.generate() + filterOp + "." + operation + "().orElse(" + startingValue + ")"; - } - - - @Nullable - static ExtremumTerminal extractExtremumTerminal(@NotNull TerminalBlock tb) { - PsiStatement[] statements = tb.getStatements(); - StreamApiMigrationInspection.Operation operation = tb.getLastOperation(); - StreamApiMigrationInspection.FilterOp filterOp = tryCast(operation, StreamApiMigrationInspection.FilterOp.class); - if (filterOp != null) { - TerminalBlock block = tb.withoutLastOperation(); - if (block == null) return null; - ExtremumTerminal terminal = extractSimpleRefCase(filterOp.getExpression(), statements, block); - if (terminal != null) return terminal; - ExtremumTerminal primitiveCase = extractSimplePrimitiveCase(filterOp.getExpression(), statements, block); - if (primitiveCase != null) return primitiveCase; + if (terminal.isPrimitive()) { + return terminalBlock.generate() + filterOp + "." + operation + "().orElse(" + startingValue + ")"; } - switch (statements.length) { - case 1: // if() .. else if() .. - PsiStatement statement = statements[0]; - PsiIfStatement ifStatement = tryCast(statement, PsiIfStatement.class); - if (ifStatement == null) return null; - PsiExpression condition = ifStatement.getCondition(); - if (condition == null) return null; - PsiStatement thenBranch = ifStatement.getThenBranch(); - PsiStatement elseBranch = ifStatement.getElseBranch(); - ExtremumTerminal terminal = extractIfElseCase(condition, unwrapIfBranch(thenBranch), unwrapIfBranch(elseBranch), tb); - if (terminal != null) return terminal; - break; - case 2: // TODO if () .. if() .. - break; - } - return null; - } - - //It looks like repeating for refs, but can't understand how to generalize for now - @Nullable - private static ExtremumTerminal extractSimplePrimitiveCase(@NotNull PsiExpression filterExpression, - @NotNull PsiStatement[] statements, - @NotNull TerminalBlock terminalBlock) { - PsiBinaryExpression binaryExpression = tryCast(filterExpression, PsiBinaryExpression.class); - if (binaryExpression == null) return null; - Comparision comparision = extractComparision(binaryExpression); - if (comparision == null) return null; - KeySelector second = comparision.getSecond(); - KeySelector first = comparision.getFirst(); - if (!hasSuitableType(first.getVariable().getType()) || !hasSuitableType(second.getVariable().getType())) return null; - - Assignment[] assignments = extractAssignments(statements); - if (assignments == null || assignments.length != 1) return null; - Assignment assignment = assignments[0]; - PsiVariable extremumHolder = assignment.getVariable(); - - ControlFlowUtils.InitializerUsageStatus status = - ControlFlowUtils.getInitializerUsageStatus(extremumHolder, terminalBlock.getMainLoop()); - if (!status.equals(ControlFlowUtils.InitializerUsageStatus.DECLARED_JUST_BEFORE)) return null; // TODO can't it be weaker? - - PsiExpression initializer = extremumHolder.getInitializer(); - Object expressionInitializer = ExpressionUtils.computeConstantExpression(initializer); - if (expressionInitializer == null) return null; - - final boolean isMax; - PsiVariable loopVariable; - PsiVariable comparisionExtrmumHolder; - PsiVariable comparisionLoopVariable; - if (extremumHolder.equals(comparision.getFirst().getVariable())) { - isMax = !comparision.isGreater(); - loopVariable = comparision.getSecond().getVariable(); - comparisionExtrmumHolder = comparision.getFirst().getVariable(); - comparisionLoopVariable = comparision.getSecond().getVariable(); - } - else if (extremumHolder.equals(comparision.getSecond().getVariable())) { - isMax = comparision.isGreater(); - loopVariable = comparision.getFirst().getVariable(); - comparisionExtrmumHolder = comparision.getSecond().getVariable(); - comparisionLoopVariable = comparision.getFirst().getVariable(); - } - else { - return null; - } - - PsiVariable assignmentLoopVariable = assignment.tryExtractVariable(); - if (assignmentLoopVariable == null || !assignmentLoopVariable.equals(comparisionLoopVariable)) return null; - //TODO check if it is really loop variable or use knowledge of non final variables - - if(!comparisionExtrmumHolder.equals(extremumHolder)) return null; - - return new ExtremumTerminal(isMax, true, comparision.getFirst(), loopVariable, extremumHolder, terminalBlock, expressionInitializer); - } - - private static boolean hasSuitableType(@NotNull PsiType type) { - return type.equals(PsiType.INT) || type.equals(PsiType.LONG) || type.equals(PsiType.DOUBLE); - } - - @NotNull - private static PsiStatement[] unwrapIfBranch(@Nullable PsiStatement statement) { - PsiBlockStatement blockStatement = tryCast(statement, PsiBlockStatement.class); - if (blockStatement != null) { - return blockStatement.getCodeBlock().getStatements(); - } - return new PsiStatement[]{statement}; - } - - //if(maxPerson == null) { - // maxPerson = current; - //} else if (maxPerson.getAge() < person.getAge()) { - // maxPerson = current; - //} - @Nullable - private static ExtremumTerminal extractIfElseCase(@NotNull PsiExpression condition, - @NotNull PsiStatement[] thenStatements, - @NotNull PsiStatement[] elseStatements, - @NotNull TerminalBlock terminalBlock) { - PsiBinaryExpression conditionExpression = tryCast(condition, PsiBinaryExpression.class); - if (conditionExpression == null) return null; - PsiVariable extremumHolder = extractNullCheckingVar(conditionExpression); - if (extremumHolder == null) return null; - - if (thenStatements.length != 1) return null; - PsiStatement firstWayStatement = thenStatements[0]; - - if (elseStatements.length != 1) return null; - PsiStatement elseStatement = elseStatements[0]; - PsiIfStatement nestedIf = tryCast(elseStatement, PsiIfStatement.class); - if (nestedIf == null) return null; - PsiExpression nestedIfCondition = nestedIf.getCondition(); - if (nestedIfCondition == null) return null; - PsiStatement nestedThenBranch = nestedIf.getThenBranch(); - if (nestedThenBranch == null) return null; - PsiStatement nestedElseBranch = nestedIf.getElseBranch(); - if (nestedElseBranch != null) return null; - PsiStatement[] nestedElseStatements = unwrapIfBranch(nestedThenBranch); - if (nestedElseStatements.length != 1) return null; - PsiStatement maxReplacingStatement = nestedElseStatements[0]; - - - if (!ourEquivalence.statementsAreEquivalent(maxReplacingStatement, firstWayStatement)) return null; - return extractSimpleRefCaseOriented(conditionExpression, nestedIfCondition, nestedElseStatements, terminalBlock); - } - - // maxPerson == null || maxPerson.getAge() < person.getAge() - @Nullable - private static ExtremumTerminal extractSimpleRefCase(@NotNull PsiExpression filterExpression, - @NotNull PsiStatement[] statements, - @NotNull TerminalBlock terminalBlock) { - PsiBinaryExpression binaryExpression = tryCast(filterExpression, PsiBinaryExpression.class); - if (binaryExpression == null) return null; - - IElementType sign = binaryExpression.getOperationSign().getTokenType(); - if (!sign.equals(JavaTokenType.OROR)) { - return null; - } - PsiExpression lOperand = binaryExpression.getLOperand(); - PsiExpression rOperand = binaryExpression.getROperand(); - if (rOperand == null) return null; - ExtremumTerminal terminal = extractSimpleRefCaseOriented(lOperand, rOperand, statements, terminalBlock); - if (terminal != null) return terminal; - return extractSimpleRefCaseOriented(rOperand, lOperand, statements, terminalBlock); - } - - @Nullable - private static ExtremumTerminal extractSimpleRefCaseOriented(@NotNull PsiExpression nullCheck, - @NotNull PsiExpression comparisionExpression, - @NotNull PsiStatement[] statements, - @NotNull TerminalBlock terminalBlock) { - if (nullCheck instanceof PsiBinaryExpression) { - PsiVariable extremumHolder = extractNullCheckingVar((PsiBinaryExpression)nullCheck); - if (comparisionExpression instanceof PsiBinaryExpression && extremumHolder != null) { - - Comparision comparision = extractComparision((PsiBinaryExpression)comparisionExpression); - if (comparision == null) return null; - Assignment[] assignments = extractAssignments(statements); - if (assignments == null) return null; - return extractRefExtremumTerminal(comparision, assignments, extremumHolder, terminalBlock); - } - } - return null; + return terminalBlock.generate() + filterOp + "." + operation + "(" + comparator + ").orElse(null)"; } @Nullable @@ -277,125 +99,306 @@ public class FindExtremumMigration extends BaseStreamApiMigration { } @Nullable - static private Assignment[] extractAssignments(@NotNull PsiStatement[] statements) { - if (statements.length == 1) { - Assignment assignment = getSingleAssignment(statements[0]); - if (assignment == null) return null; - return new Assignment[]{assignment}; - } - else if (statements.length == 2) { - Assignment first = getSingleAssignment(statements[0]); - if (first == null) return null; - Assignment second = getSingleAssignment(statements[1]); - if (second == null) return null; - return new Assignment[]{first, second}; - } - return null; - } - - @Nullable - private static Assignment getSingleAssignment(@NotNull PsiStatement statement) { - if (statement instanceof PsiExpressionStatement) { - PsiAssignmentExpression assignment = tryCast(((PsiExpressionStatement)statement).getExpression(), PsiAssignmentExpression.class); - PsiReferenceExpression holderReference = tryCast(assignment.getLExpression(), PsiReferenceExpression.class); - if (holderReference == null) return null; - PsiVariable holder = tryCast(holderReference.resolve(), PsiVariable.class); - if (holder == null) return null; - PsiExpression expression = assignment.getRExpression(); - if (expression == null) return null; - return new Assignment(holder, expression); - } - return null; - } - - @Nullable - private static ExtremumTerminal extractRefExtremumTerminal(@NotNull Comparision comparision, - @NotNull Assignment[] assignments, - @NotNull PsiVariable nullCheckedHolder, - @NotNull TerminalBlock terminalBlock) { - PsiExpression initializer = nullCheckedHolder.getInitializer(); - if (initializer == null || !PsiType.NULL.equals(initializer.getType())) return null; // TODO constant expression? - - ControlFlowUtils.InitializerUsageStatus status = - ControlFlowUtils.getInitializerUsageStatus(nullCheckedHolder, terminalBlock.getMainLoop()); - if (!status.equals(ControlFlowUtils.InitializerUsageStatus.DECLARED_JUST_BEFORE)) return null; // TODO can't it be weaker? - - final boolean isMax; - final PsiVariable comparisionExtremumHolder; - final PsiVariable comparisionLoopVar; - final KeySelector comparisionKeySelector; - if (comparision.getFirst().getVariable().equals(nullCheckedHolder)) { - isMax = !comparision.isGreater(); - comparisionExtremumHolder = comparision.getFirst().getVariable(); - comparisionLoopVar = comparision.getSecond().getVariable(); - comparisionKeySelector = comparision.getFirst(); - } - else if (comparision.getSecond().getVariable().equals(nullCheckedHolder)) { - isMax = comparision.isGreater(); - comparisionExtremumHolder = comparision.getSecond().getVariable(); - comparisionLoopVar = comparision.getFirst().getVariable(); - comparisionKeySelector = comparision.getSecond(); - } - else { - return null; - } - - PsiType lambdaType = comparisionKeySelector.acceptingType(); - if (!hasSuitableType(lambdaType)) return null; - - if (assignments.length == 1) { - Assignment assignment = assignments[0]; - if (!assignment.getVariable().equals(nullCheckedHolder)) return null; - if (assignment.hasSameVariables(comparisionExtremumHolder, comparisionLoopVar)) return null; - return new ExtremumTerminal(isMax, false, comparisionKeySelector, comparisionLoopVar, comparisionExtremumHolder, terminalBlock, null); - } - else if (assignments.length == 2) { - //if(max == null || maxAge < current.getAge()) {max = - Assignment first = assignments[0]; - Assignment second = assignments[1]; - if (first.getVariable().equals(nullCheckedHolder) && first.hasSameVariables(comparisionExtremumHolder, comparisionLoopVar)) { - KeySelector assignmentKeySelector = KeySelector.extractKeySelector(second.getExpression()); - if (assignmentKeySelector != null && comparisionKeySelector.equalShape(assignmentKeySelector)) { - PsiVariable keyExtremumHolder = assignmentKeySelector.getVariable(); - //if (keyExtremumHolder.equals(comparisionLoopVar)) { - // - //} - //TODO - } + static ExtremumTerminal extract(@NotNull TerminalBlock terminalBlock) { + PsiStatement[] statements = terminalBlock.getStatements(); + StreamApiMigrationInspection.Operation operation = terminalBlock.getLastOperation(); + StreamApiMigrationInspection.FilterOp filterOp = tryCast(operation, StreamApiMigrationInspection.FilterOp.class); + if (filterOp != null) { + TerminalBlock block = terminalBlock.withoutLastOperation(); + if (block != null) { + PsiExpression condition = filterOp.getExpression(); + ExtremumTerminal simpleRefCase = extractSimpleRefCase(condition, statements, block); + if (simpleRefCase != null) return simpleRefCase; + ExtremumTerminal primitiveCase = extractSimplePrimitiveCase(condition, statements, block); + if (primitiveCase != null) return primitiveCase; + ExtremumTerminal complexRefCase = extractComplexRefCase(condition, statements, block); + if (complexRefCase != null) return complexRefCase; } - //else if() // TODO second is extremum holder assignment + } + return extractIfElseCase(statements, terminalBlock); + } + + //if(maxPerson == null) { + // maxPerson = current; + //} else if (maxPerson.getAge() < person.getAge()) { + // maxPerson = current; + //} + @Nullable + static private ExtremumTerminal extractIfElseCase(@NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock) { + if (statements.length != 1) return null; + PsiStatement statement = statements[0]; + PsiIfStatement ifStatement = tryCast(statement, PsiIfStatement.class); + if (ifStatement == null) return null; + PsiExpression thenCondition = ifStatement.getCondition(); + if (thenCondition == null) return null; + PsiStatement thenBranch = unwrapIfBranchToStatement(ifStatement.getThenBranch()); + PsiStatement elseBranch = unwrapIfBranchToStatement(ifStatement.getElseBranch()); + if (thenBranch == null || elseBranch == null) return null; + return extractIfElseCase(thenBranch, thenCondition, elseBranch, terminalBlock); + } + + @Nullable + static private ExtremumTerminal extractIfElseCase(@NotNull PsiStatement thenBranch, + @NotNull PsiExpression thenCondition, + @NotNull PsiStatement elseBranch, + @NotNull TerminalBlock terminalBlock) { + PsiIfStatement elseIfStatement = tryCast(elseBranch, PsiIfStatement.class); + if (elseIfStatement == null || elseIfStatement.getElseBranch() != null) return null; + PsiExpression elseIfCondition = elseIfStatement.getCondition(); + PsiStatement elseIf = unwrapIfBranchToStatement(elseIfStatement.getThenBranch()); + if (elseIf == null || elseIfCondition == null) return null; + ExtremumTerminal firstWay = extractIfElseCase(thenBranch, thenCondition, elseIf, elseIfCondition, terminalBlock); + if (firstWay != null) return firstWay; + return extractIfElseCase(elseIf, elseIfCondition, thenBranch, thenCondition, terminalBlock); + } + + @Nullable + static private ExtremumTerminal extractIfElseCase(@NotNull PsiStatement nullCheckBranch, + @NotNull PsiExpression nullCheckExpr, + @NotNull PsiStatement comparisionBranch, + @NotNull PsiExpression comparisionExpr, + @NotNull TerminalBlock terminalBlock) { + if (!ourEquivalence.statementsAreEquivalent(nullCheckBranch, comparisionBranch)) return null; + return extractSimpleRefCase(nullCheckExpr, comparisionExpr, new PsiStatement[]{comparisionBranch}, terminalBlock); + } + + @Nullable + static private PsiStatement unwrapIfBranchToStatement(@Nullable PsiStatement statement) { + PsiStatement[] statements = unwrapIfBranch(statement); + if (statements.length != 1) return null; + return statements[0]; + } + + @NotNull + static private PsiStatement[] unwrapIfBranch(@Nullable PsiStatement statement) { + PsiBlockStatement blockStatement = tryCast(statement, PsiBlockStatement.class); + if (blockStatement != null) { + return blockStatement.getCodeBlock().getStatements(); + } + return new PsiStatement[]{statement}; + } + + //Person maxPerson = null; + //int maxAge = Integer.MIN_VALUE; + //for (Person person : personList) { + // if (maxPerson == null || maxAge < person.getAge()) { + // maxPerson = person; + // maxAge = person.getAge(); + // } + //} + @Nullable + static private ExtremumTerminal extractComplexRefCase(@NotNull PsiExpression condition, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock) { + return extractRefCase(condition, statements, terminalBlock, FindExtremumMigration::extractComplexRefCase); + } + + @Nullable + static private ExtremumTerminal extractComplexRefCase(@NotNull PsiExpression nullCheckExpr, + @NotNull PsiExpression comparisionExpr, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock) { + PsiBinaryExpression nullCheckBinary = tryCast(nullCheckExpr, PsiBinaryExpression.class); + if (nullCheckBinary == null) return null; + PsiVariable nullCheckingVar = extractNullCheckingVar(nullCheckBinary); + if (nullCheckingVar == null) return null; + Comparision comparision = Comparision.extract(comparisionExpr); + if (comparision == null) return null; + ComplexAssignment complexAssignment = ComplexAssignment.extractComplex(statements); + if (complexAssignment == null) return null; + Boolean isMax = isMax(complexAssignment, comparision); + if (isMax == null || + !useSameVariables(complexAssignment, comparision, isMax) || + changedBeforeLoop(complexAssignment.getExtremumHolder(), terminalBlock) || + changedBeforeLoop(complexAssignment.getExtremumKey(), terminalBlock) || + !terminalBlock.getVariable().equals(complexAssignment.getLoopVariable())) { + return null; + } + + PsiExpression keyInitializer = complexAssignment.getExtremumKey().getInitializer(); + PsiExpression extremumHolderInitializer = complexAssignment.getExtremumHolder().getInitializer(); + if (!ExpressionUtils.isNullLiteral(extremumHolderInitializer)) return null; + if (ExpressionUtils.computeConstantExpression(keyInitializer) == null) return null; + + return new ExtremumTerminal(2, false, isMax, complexAssignment.getExtremumKeySelector(), complexAssignment.getLoopVariable(), + complexAssignment.getExtremumHolder(), terminalBlock, keyInitializer, complexAssignment.getExtremumKey()); + } + + //if(max < anInt) { + //max = anInt; + //} + @Nullable + private static ExtremumTerminal extractSimplePrimitiveCase(@NotNull PsiExpression condition, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock) { + Comparision comparision = Comparision.extract(condition); + if (comparision == null) return null; + SimpleAssignment assignment = SimpleAssignment.extractSimple(statements); + if (assignment == null) return null; + if (!(comparision.getFirstSelector() instanceof VariableKeySelector) || + !(comparision.getSecondSelector() instanceof VariableKeySelector)) { + return null; + } + Boolean max = isMax(assignment, comparision); + if (max == null || + !useSameVariables(assignment, comparision, max) || + changedBeforeLoop(comparision.getExtremumHolderSelector(max).getVariable(), terminalBlock) || + !terminalBlock.getVariable().equals(assignment.getLoopVariable())) { + return null; + } + + KeySelector extremumHolderSelector = comparision.getExtremumHolderSelector(max); + PsiVariable extremumHolder = extremumHolderSelector.getVariable(); + PsiExpression initializer = extremumHolder.getInitializer(); + if (ExpressionUtils.computeConstantExpression(initializer) == null) return null; + return new ExtremumTerminal(1, true, max, extremumHolderSelector, assignment.getLoopVariable(), + assignment.getExtremumHolder(), terminalBlock, initializer, null); + } + + @Nullable + static private ExtremumTerminal extractSimpleRefCase(@NotNull PsiExpression condition, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock) { + return extractRefCase(condition, statements, terminalBlock, FindExtremumMigration::extractSimpleRefCase); + } + + @Nullable + static private ExtremumTerminal extractRefCase(@NotNull PsiExpression condition, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock, + @NotNull Extractor extractor) { + PsiBinaryExpression binaryExpression = tryCast(condition, PsiBinaryExpression.class); + if (binaryExpression == null) return null; + IElementType sign = binaryExpression.getOperationSign().getTokenType(); + PsiExpression lOperand = binaryExpression.getLOperand(); + PsiExpression rOperand = binaryExpression.getROperand(); + if (!sign.equals(JavaTokenType.OROR) || rOperand == null) return null; + ExtremumTerminal firstWay = extractor.extractOriented(lOperand, rOperand, statements, terminalBlock); + if (firstWay != null) return firstWay; + return extractor.extractOriented(rOperand, lOperand, statements, terminalBlock); + } + + @Nullable + static private ExtremumTerminal extractSimpleRefCase(@NotNull PsiExpression nullCheckExpr, + @NotNull PsiExpression comparisionExpr, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock) { + PsiBinaryExpression nullCheckBinary = tryCast(nullCheckExpr, PsiBinaryExpression.class); + if (nullCheckBinary == null) return null; + PsiVariable nullCheckingVar = extractNullCheckingVar(nullCheckBinary); + if (nullCheckingVar == null) return null; + Comparision comparision = Comparision.extract(comparisionExpr); + if (comparision == null) return null; + SimpleAssignment simpleAssignment = SimpleAssignment.extractSimple(statements); + if (simpleAssignment == null) return null; + + Boolean isMax = isMax(simpleAssignment, comparision); + if (isMax == null || + !useSameVariables(simpleAssignment, comparision, isMax) || + changedBeforeLoop(simpleAssignment.getExtremumHolder(), terminalBlock) || + !terminalBlock.getVariable().equals(simpleAssignment.getLoopVariable())) return null; + PsiVariable loopVariable = comparision.getLoopVariableKeySelector(isMax).getVariable(); + PsiVariable extremumHolder = comparision.getExtremumHolderSelector(isMax).getVariable(); + PsiExpression initializer = extremumHolder.getInitializer(); + if (!ExpressionUtils.isNullLiteral(initializer)) return null; + return new ExtremumTerminal(1, false, isMax, comparision.getFirstSelector(), loopVariable, extremumHolder, + terminalBlock, null, null); + } + + static private boolean changedBeforeLoop(@NotNull PsiVariable variable, + @NotNull TerminalBlock terminalBlock) { + ControlFlowUtils.InitializerUsageStatus status = + ControlFlowUtils.getInitializerUsageStatus(variable, terminalBlock.getMainLoop()); + return status.equals(ControlFlowUtils.InitializerUsageStatus.UNKNOWN); + } + + // if (maxPerson == null || maxAge < person.getAge()) { + // maxPerson = person; + // maxAge = person.getAge(); + static private boolean useSameVariables(ComplexAssignment complexAssignment, Comparision comparision, boolean isMax) { + PsiExpression extremumKeySelectorExpression = complexAssignment.getExtremumKeySelector().getExpression(); + PsiExpression loopVarKeySelector = comparision.getLoopVariableKeySelector(isMax).getExpression(); + PsiVariable loopVariable = comparision.getLoopVariableKeySelector(isMax).getVariable(); + PsiVariable extremumHolder = comparision.getExtremumHolderSelector(isMax).getVariable(); // maxAge + return complexAssignment.getLoopVariable().equals(loopVariable) && + complexAssignment.getExtremumKey().equals(extremumHolder) && + comparision.getExtremumHolderSelector(isMax) instanceof VariableKeySelector && + ourEquivalence.expressionsAreEquivalent(extremumKeySelectorExpression, loopVarKeySelector); + } + + static private boolean useSameVariables(SimpleAssignment simpleAssignment, Comparision comparision, boolean isMax) { + return simpleAssignment.getExtremumHolder().equals(comparision.getExtremumHolderSelector(isMax).getVariable()) && + simpleAssignment.getLoopVariable().equals(comparision.getLoopVariableKeySelector(isMax).getVariable()); + } + + @Nullable + static private Boolean isMax(SimpleAssignment assignment, Comparision comparision) { + if (assignment.getExtremumHolder().equals(comparision.getFirstSelector().getVariable())) { + return !comparision.isGreater(); + } + else if (assignment.getExtremumHolder().equals(comparision.getSecondSelector().getVariable())) { + return comparision.isGreater(); } else { return null; } + } + + @Nullable + static private Boolean isMax(ComplexAssignment assignment, Comparision comparision) { + if (assignment.getExtremumKey().equals(comparision.getFirstSelector().getVariable())) { + return !comparision.isGreater(); + } + else if (assignment.getExtremumKey().equals(comparision.getSecondSelector().getVariable())) { + return comparision.isGreater(); + } + else { + return null; + } + } + + @Nullable + private static PsiVariable extractNullCheckingVar(PsiExpression expression) { + PsiBinaryExpression binaryExpression = tryCast(expression, PsiBinaryExpression.class); + if (!binaryExpression.getOperationSign().getTokenType().equals(JavaTokenType.EQEQ)) { + return null; + } + PsiExpression lOperand = binaryExpression.getLOperand(); + PsiExpression rOperand = binaryExpression.getROperand(); + if (rOperand == null) return null; + + PsiVariable lVariable = extractNullCheckingVar(lOperand, rOperand); + if (lVariable != null) return lVariable; + PsiVariable rVariable = extractNullCheckingVar(rOperand, lOperand); + if (rVariable != null) return rVariable; return null; } @Nullable - private static Comparision extractComparision(@NotNull PsiBinaryExpression expression) { - IElementType sign = expression.getOperationSign().getTokenType(); - PsiExpression operand = expression.getROperand(); - if (operand == null) return null; - if (sign.equals(JavaTokenType.LT) || sign.equals(JavaTokenType.LE)) { - return extractComparision(expression.getLOperand(), operand, false); - } - else if (sign.equals(JavaTokenType.GT) || sign.equals(JavaTokenType.GE)) { - return extractComparision(expression.getLOperand(), operand, true); + private static PsiVariable extractNullCheckingVar(PsiExpression first, PsiExpression second) { + PsiReferenceExpression lReference = tryCast(first, PsiReferenceExpression.class); + if (lReference != null) { + PsiVariable variable = tryCast(lReference.resolve(), PsiVariable.class); + if (variable != null && second.getText().equals("null")) { + return variable; + } } return null; } @Nullable - private static Comparision extractComparision(@NotNull PsiExpression first, @NotNull PsiExpression second, boolean isGreater) { - KeySelector firstSelector = KeySelector.extractKeySelector(first); - KeySelector secondSelector = KeySelector.extractKeySelector(second); - if (firstSelector == null || secondSelector == null || !firstSelector.equalShape(secondSelector)) return null; - return new Comparision(firstSelector, secondSelector, isGreater); + static PsiVariable getVariable(@NotNull PsiExpression expression) { + PsiReferenceExpression referenceExpression = tryCast(expression, PsiReferenceExpression.class); + if (referenceExpression == null) return null; + return tryCast(referenceExpression.resolve(), PsiVariable.class); } + @Nullable private static PsiVariable resolveMethodReceiver(@NotNull PsiExpression expression) { PsiMethodCallExpression methodCallExpression = tryCast(expression, PsiMethodCallExpression.class); + if (methodCallExpression == null) return null; PsiExpression qualifierExpression = methodCallExpression.getMethodExpression().getQualifierExpression(); PsiReferenceExpression reference = tryCast(qualifierExpression, PsiReferenceExpression.class); if (reference == null) return null; @@ -411,51 +414,31 @@ public class FindExtremumMigration extends BaseStreamApiMigration { return tryCast(resolvedMethod, PsiMethod.class); } - @Nullable - private static PsiVariable extractNullCheckingVar(PsiBinaryExpression expression) { - if (!expression.getOperationSign().getTokenType().equals(JavaTokenType.EQEQ)) { - return null; - } - PsiExpression lOperand = expression.getLOperand(); - PsiExpression rOperand = expression.getROperand(); - if (rOperand == null) return null; - - PsiVariable lVariable = extractOrientedNullCheck(lOperand, rOperand); - if (lVariable != null) return lVariable; - PsiVariable rVariable = extractOrientedNullCheck(rOperand, lOperand); - if (rVariable != null) return rVariable; - return null; + private static boolean isCorrectType(@NotNull PsiType type) { + return type.equals(PsiType.INT) || type.equals(PsiType.LONG) || type.equals(PsiType.DOUBLE); } - @Nullable - private static PsiVariable extractOrientedNullCheck(PsiExpression first, PsiExpression second) { - PsiReferenceExpression lReference = tryCast(first, PsiReferenceExpression.class); - if (lReference != null) { - PsiVariable variable = tryCast(lReference.resolve(), PsiVariable.class); - if (variable != null && second.getText().equals("null")) { - return variable; - } - } - return null; + interface Extractor { + @Nullable + ExtremumTerminal extractOriented(@NotNull PsiExpression nullCheckExpr, + @NotNull PsiExpression comparisionExpr, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock); } - /** - * Used to create Comparator - */ interface KeySelector { /** * @param varName that can be used in comparator lambda * @return lambda text to create comparator */ @NotNull - String getLambdaText(@NotNull String varName); - + String buildLambda(@NotNull String varName); /** - * @return type of comparator function + * @return type of selected key to be compared */ @NotNull - PsiType acceptingType(); + PsiType selectedKeyType(); /** * @return variable used in original key selection expression @@ -463,31 +446,43 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @NotNull PsiVariable getVariable(); + /** + * @return original key selection expression + */ + @NotNull + PsiExpression getExpression(); + + @NotNull + PsiExpression buildExpression(@NotNull String qualifierName); + boolean equalShape(@NotNull KeySelector keySelector); @Nullable - static KeySelector extractKeySelector(@NotNull PsiExpression expression) { + static KeySelector extractSelector(@NotNull PsiExpression expression) { MethodKeySelector methodKeySelector = MethodKeySelector.extract(expression); - if (methodKeySelector != null) return methodKeySelector; + if (methodKeySelector != null && isCorrectType(methodKeySelector.selectedKeyType())) return methodKeySelector; FieldKeySelector fieldKeySelector = FieldKeySelector.extract(expression); - if (fieldKeySelector != null) return fieldKeySelector; + if (fieldKeySelector != null && isCorrectType(fieldKeySelector.selectedKeyType())) return fieldKeySelector; VariableKeySelector variableKeySelector = VariableKeySelector.extract(expression); - if (variableKeySelector != null) return variableKeySelector; + if (variableKeySelector != null && isCorrectType(variableKeySelector.selectedKeyType())) return variableKeySelector; return null; } } static class MethodKeySelector implements KeySelector { private final @NotNull PsiMethod myMethod; + private final @NotNull PsiMethodCallExpression myExpression; private final @NotNull PsiVariable myVariable; @NotNull private final PsiClass myContainingClass; @NotNull private final PsiType myType; MethodKeySelector(@NotNull PsiMethod method, + @NotNull PsiMethodCallExpression expression, @NotNull PsiVariable variable, @NotNull PsiClass containingClass, @NotNull PsiType type) { myMethod = method; + myExpression = expression; myVariable = variable; myContainingClass = containingClass; myType = type; @@ -495,13 +490,13 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @NotNull @Override - public String getLambdaText(@NotNull String varName) { + public String buildLambda(@NotNull String varName) { return myContainingClass.getQualifiedName() + "::" + myMethod.getName(); } @NotNull @Override - public PsiType acceptingType() { + public PsiType selectedKeyType() { return myType; } @@ -511,9 +506,28 @@ public class FindExtremumMigration extends BaseStreamApiMigration { return myVariable; } + @NotNull + @Override + public PsiExpression getExpression() { + return myExpression; + } + + @NotNull + @Override + public PsiExpression buildExpression(@NotNull String qualifierName) { + PsiMethodCallExpression callExpression = (PsiMethodCallExpression)myExpression.copy(); + PsiReferenceExpression qualifierReference = + tryCast(callExpression.getMethodExpression().getQualifierExpression(), PsiReferenceExpression.class); + PsiVariable receiver = resolveMethodReceiver(callExpression); + //noinspection ConstantConditions checked at creation + ExpressionUtils.bindReferenceTo(qualifierReference, qualifierName); + return callExpression; + } + @Override public boolean equalShape(@NotNull KeySelector keySelector) { - return keySelector instanceof MethodKeySelector && ((MethodKeySelector)keySelector).myMethod.equals(myMethod); + return keySelector instanceof MethodKeySelector && + ((MethodKeySelector)keySelector).myMethod.equals(myMethod); } @Nullable @@ -526,25 +540,34 @@ public class FindExtremumMigration extends BaseStreamApiMigration { if (containingClass == null) return null; PsiType returnType = method.getReturnType(); if (returnType == null) return null; - return new MethodKeySelector(method, receiver, containingClass, returnType); + PsiMethodCallExpression methodCallExpression = tryCast(expression, PsiMethodCallExpression.class); + if (methodCallExpression == null) return null; + PsiExpression qualifierExpression = methodCallExpression.getMethodExpression().getQualifierExpression(); + if (qualifierExpression == null) return null; + if(tryCast(qualifierExpression, PsiReferenceExpression.class) == null) return null; + return new MethodKeySelector(method, methodCallExpression, receiver, containingClass, returnType); } } private static class VariableKeySelector implements KeySelector { private final PsiVariable myVariable; + private final PsiReferenceExpression myReferenceExpression; - private VariableKeySelector(PsiVariable variable) {myVariable = variable;} + private VariableKeySelector(PsiVariable variable, PsiReferenceExpression expression) { + myVariable = variable; + myReferenceExpression = expression; + } @NotNull @Override - public String getLambdaText(@NotNull String varName) { + public String buildLambda(@NotNull String varName) { String variableText = myVariable.getText(); return variableText + "->" + variableText; } @NotNull @Override - public PsiType acceptingType() { + public PsiType selectedKeyType() { return myVariable.getType(); } @@ -554,9 +577,23 @@ public class FindExtremumMigration extends BaseStreamApiMigration { return myVariable; } + @NotNull + @Override + public PsiExpression getExpression() { + return myReferenceExpression; + } + + @NotNull + @Override + public PsiExpression buildExpression(@NotNull String qualifierName) { + PsiReferenceExpression referenceExpression = (PsiReferenceExpression)myReferenceExpression.copy(); + ExpressionUtils.bindReferenceTo(referenceExpression, qualifierName); + return referenceExpression; + } + @Override public boolean equalShape(@NotNull KeySelector keySelector) { - return keySelector instanceof VariableKeySelector; + return keySelector instanceof VariableKeySelector; } @Nullable @@ -565,28 +602,32 @@ public class FindExtremumMigration extends BaseStreamApiMigration { if (referenceExpression == null) return null; PsiVariable variable = tryCast(referenceExpression.resolve(), PsiVariable.class); if (variable == null) return null; - return new VariableKeySelector(variable); + return new VariableKeySelector(variable, referenceExpression); } } private static class FieldKeySelector implements KeySelector { private final @NotNull PsiField myField; private final @NotNull PsiVariable myVariable; + private final @NotNull PsiReferenceExpression myReferenceExpression; - private FieldKeySelector(@NotNull PsiField field, @NotNull PsiVariable variable) { + private FieldKeySelector(@NotNull PsiField field, + @NotNull PsiVariable variable, + @NotNull PsiReferenceExpression referenceExpression) { myField = field; myVariable = variable; + myReferenceExpression = referenceExpression; } @NotNull @Override - public String getLambdaText(@NotNull String varName) { + public String buildLambda(@NotNull String varName) { return varName + "->" + varName + "." + myField.getName(); } @NotNull @Override - public PsiType acceptingType() { + public PsiType selectedKeyType() { return myField.getType(); } @@ -596,6 +637,21 @@ public class FindExtremumMigration extends BaseStreamApiMigration { return myVariable; } + @NotNull + @Override + public PsiExpression getExpression() { + return myReferenceExpression; + } + + @NotNull + @Override + public PsiExpression buildExpression(@NotNull String referenceName) { + PsiReferenceExpression copy = (PsiReferenceExpression)myReferenceExpression.copy(); + //noinspection ConstantConditions - checked at creation + ExpressionUtils.bindReferenceTo(copy, referenceName); + return copy; + } + @Override public boolean equals(Object obj) { return obj instanceof FieldKeySelector && ((FieldKeySelector)obj).myField.equals(myField); @@ -603,7 +659,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @Override public boolean equalShape(@NotNull KeySelector keySelector) { - return keySelector instanceof FieldKeySelector && ((FieldKeySelector)keySelector).myField.equals(myField); + return keySelector instanceof FieldKeySelector && ((FieldKeySelector)keySelector).myField.equals(myField); } @Nullable @@ -613,100 +669,54 @@ public class FindExtremumMigration extends BaseStreamApiMigration { PsiField field = tryCast(referenceExpression.resolve(), PsiField.class); if (field == null) return null; PsiElement qualifier = referenceExpression.getQualifier(); + if (referenceExpression.getQualifierExpression() == null) return null; PsiReference reference = tryCast(qualifier, PsiReference.class); if (reference == null) return null; PsiVariable variable = tryCast(reference.resolve(), PsiVariable.class); if (variable == null) return null; - return new FieldKeySelector(field, variable); - } - } - - private static class Assignment { - private final @NotNull PsiVariable myVariable; - private final @NotNull PsiExpression myExpression; - - private Assignment(@NotNull PsiVariable variable, @NotNull PsiExpression expression) { - myVariable = variable; - myExpression = expression; - } - - @NotNull - public PsiVariable getVariable() { - return myVariable; - } - - @NotNull - public PsiExpression getExpression() { - return myExpression; - } - - private boolean hasSameVariables(@NotNull PsiVariable extremumHolder, @NotNull PsiVariable loopVar) { - PsiVariable rVariable = tryCast(myExpression, PsiVariable.class); - return rVariable != null & myVariable.equals(extremumHolder) && rVariable.equals(loopVar); - } - - @Nullable - public PsiVariable tryExtractVariable(){ - PsiReferenceExpression referenceExpression = tryCast(myExpression, PsiReferenceExpression.class); - if(referenceExpression == null) return null; - PsiVariable variable = tryCast(referenceExpression.resolve(), PsiVariable.class); - if(variable == null) return null; - return variable; - } - } - - static class Comparision { - private final @NotNull KeySelector myFirst; - private final @NotNull KeySelector mySecond; - private final boolean myIsGreater; - - Comparision(@NotNull KeySelector first, @NotNull KeySelector second, boolean greater) { - myFirst = first; - mySecond = second; - myIsGreater = greater; - } - - public boolean isGreater() { - return myIsGreater; - } - - @NotNull - public KeySelector getSecond() { - return mySecond; - } - - @NotNull - public KeySelector getFirst() { - return myFirst; + return new FieldKeySelector(field, variable, referenceExpression); } } static class ExtremumTerminal { - private final boolean myIsMax; - private final boolean myIsPrimitive; + private final int myNonFinalVariableCount; + private final boolean isPrimitive; + private final boolean isMax; private final @NotNull KeySelector myKeySelector; private final @NotNull PsiVariable myLoopVariable; private final @NotNull PsiVariable myExtremumHolder; private final @NotNull TerminalBlock myTerminalBlock; - private final @Nullable Object myStartingValue; + private final @Nullable PsiExpression myKeySelectorInitializer; + private final @Nullable PsiVariable myKeyExtremum; - public ExtremumTerminal(boolean isMax, - boolean isPrimitive, @NotNull KeySelector keySelector, + public ExtremumTerminal(int nonFinalVariableCount, + boolean isPrimitive, + boolean isMax, + @NotNull KeySelector keySelector, @NotNull PsiVariable loopVariable, @NotNull PsiVariable extremumHolder, - @NotNull TerminalBlock terminalBlock, - @Nullable Object startingValue) { - myIsMax = isMax; - myIsPrimitive = isPrimitive; + @NotNull TerminalBlock block, @Nullable PsiExpression initializer, @Nullable PsiVariable keyExtremum) { + myNonFinalVariableCount = nonFinalVariableCount; + this.isPrimitive = isPrimitive; + this.isMax = isMax; myKeySelector = keySelector; myLoopVariable = loopVariable; myExtremumHolder = extremumHolder; - myStartingValue = startingValue; - myTerminalBlock = terminalBlock; + myTerminalBlock = block; + myKeySelectorInitializer = initializer; + myKeyExtremum = keyExtremum; + } + + public int getNonFinalVariableCount() { + return myNonFinalVariableCount; + } + + public boolean isPrimitive() { + return isPrimitive; } public boolean isMax() { - return myIsMax; + return isMax; } @NotNull @@ -725,8 +735,8 @@ public class FindExtremumMigration extends BaseStreamApiMigration { } @Nullable - public Object getStartingValue() { - return myStartingValue; + public PsiExpression getKeySelectorInitializer() { + return myKeySelectorInitializer; } @NotNull @@ -734,8 +744,182 @@ public class FindExtremumMigration extends BaseStreamApiMigration { return myTerminalBlock; } - public boolean isPrimitive() { - return myIsPrimitive; + @Nullable + public PsiVariable getKeyExtremum() { + return myKeyExtremum; } } -} + + private static abstract class Assignment { + private final @NotNull PsiVariable myExtremumHolder; + private final @NotNull PsiVariable myLoopVariable; + + public Assignment(@NotNull PsiVariable extremumHolder, @NotNull PsiVariable loopVariable) { + myExtremumHolder = extremumHolder; + myLoopVariable = loopVariable; + } + + @NotNull + public PsiVariable getExtremumHolder() { + return myExtremumHolder; + } + + @NotNull + public PsiVariable getLoopVariable() { + return myLoopVariable; + } + } + + private static class SimpleAssignment extends Assignment { + private SimpleAssignment(@NotNull PsiVariable extremum, @NotNull PsiVariable loopVariable) { + super(extremum, loopVariable); + } + + @Nullable + static SimpleAssignment extractSimple(@NotNull PsiStatement[] statements) { + if (statements.length != 1) return null; + PsiStatement statement = statements[0]; + PsiExpressionStatement exprStatement = tryCast(statement, PsiExpressionStatement.class); + if (exprStatement == null) return null; + PsiAssignmentExpression assignment = tryCast(exprStatement.getExpression(), PsiAssignmentExpression.class); + PsiVariable extremumHolder = getVariable(assignment.getLExpression()); + if (extremumHolder == null) return null; + PsiExpression rExpression = assignment.getRExpression(); + if (rExpression == null) return null; + PsiVariable loopVar = getVariable(rExpression); + if (loopVar == null) return null; + return new SimpleAssignment(extremumHolder, loopVar); + } + } + + private static class ComplexAssignment extends Assignment { + private final @NotNull PsiVariable myExtremumKey; + private final @NotNull KeySelector myExtremumKeySelector; + + public ComplexAssignment(@NotNull PsiVariable extremum, + @NotNull PsiVariable loopVariable, + @NotNull PsiVariable extremumKey, + @NotNull KeySelector selector) { + super(extremum, loopVariable); + myExtremumKey = extremumKey; + myExtremumKeySelector = selector; + } + + @NotNull + public PsiVariable getExtremumKey() { + return myExtremumKey; + } + + @NotNull + public KeySelector getExtremumKeySelector() { + return myExtremumKeySelector; + } + + @Nullable + static ComplexAssignment extractComplex(@NotNull PsiStatement[] statements) { + if (statements.length != 2) return null; + PsiStatement first = statements[0]; + PsiStatement second = statements[1]; + ComplexAssignment firstWay = extractComplex(first, second); + if (firstWay != null) return firstWay; + return extractComplex(second, first); + } + + @Nullable + static ComplexAssignment extractComplex(@NotNull PsiStatement first, @NotNull PsiStatement second) { + PsiExpressionStatement firstExpr = tryCast(first, PsiExpressionStatement.class); + PsiExpressionStatement secondExpr = tryCast(second, PsiExpressionStatement.class); + if (firstExpr == null || secondExpr == null) return null; + PsiAssignmentExpression firstAssignment = tryCast(firstExpr.getExpression(), PsiAssignmentExpression.class); + PsiAssignmentExpression secondAssignment = tryCast(secondExpr.getExpression(), PsiAssignmentExpression.class); + if (firstAssignment == null || secondAssignment == null) return null; + ComplexAssignment firstWay = extractComplex(firstAssignment, secondAssignment); + if (firstWay != null) return firstWay; + return extractComplex(secondAssignment, firstAssignment); + } + + @Nullable + static ComplexAssignment extractComplex(@NotNull PsiAssignmentExpression first, @NotNull PsiAssignmentExpression second) { + PsiExpression firstRExpression = first.getRExpression(); + PsiExpression secondRExpression = second.getRExpression(); + if (firstRExpression == null || secondRExpression == null) return null; + PsiVariable extremum = getVariable(first.getLExpression()); + if (extremum == null) return null; + PsiVariable loopVar = getVariable(firstRExpression); + if (loopVar == null) return null; + PsiVariable extremumKeyHolder = getVariable(second.getLExpression()); + if (extremumKeyHolder == null) return null; + KeySelector loopVarKeySelector = KeySelector.extractSelector(secondRExpression); + if (loopVarKeySelector == null) return null; + return new ComplexAssignment(extremum, loopVar, extremumKeyHolder, loopVarKeySelector); + } + } + + private static class Comparision { + private final @NotNull KeySelector myFirstSelector; + private final @NotNull KeySelector mySecondSelector; + private final boolean myIsGreater; + + private Comparision(@NotNull KeySelector firstSelector, @NotNull KeySelector secondSelector, boolean greater) { + myFirstSelector = firstSelector; + mySecondSelector = secondSelector; + myIsGreater = greater; + } + + @NotNull + public KeySelector getFirstSelector() { + return myFirstSelector; + } + + @NotNull + public KeySelector getSecondSelector() { + return mySecondSelector; + } + + public boolean isGreater() { + return myIsGreater; + } + + public KeySelector getExtremumHolderSelector(boolean isMax) { + if (myIsGreater) { + return !isMax ? myFirstSelector : mySecondSelector; + } + else { + return isMax ? myFirstSelector : mySecondSelector; + } + } + + public KeySelector getLoopVariableKeySelector(boolean isMax) { + if (myIsGreater) { + return isMax ? myFirstSelector : mySecondSelector; + } + else { + return !isMax ? myFirstSelector : mySecondSelector; + } + } + + @Nullable + static Comparision extract(@NotNull PsiExpression expression) { + PsiBinaryExpression binaryExpression = tryCast(expression, PsiBinaryExpression.class); + IElementType sign = binaryExpression.getOperationSign().getTokenType(); + PsiExpression rOperand = binaryExpression.getROperand(); + if (rOperand == null) return null; + PsiExpression lOperand = binaryExpression.getLOperand(); + if (sign.equals(JavaTokenType.LT) || sign.equals(JavaTokenType.LE)) { + return extract(lOperand, rOperand, false); + } + else if (sign.equals(JavaTokenType.GT) || sign.equals(JavaTokenType.GE)) { + return extract(lOperand, rOperand, true); + } + return null; + } + + @Nullable + private static Comparision extract(@NotNull PsiExpression first, @NotNull PsiExpression second, boolean isGreater) { + KeySelector firstSelector = KeySelector.extractSelector(first); + KeySelector secondSelector = KeySelector.extractSelector(second); + if (firstSelector == null || secondSelector == null) return null; + return new Comparision(firstSelector, secondSelector, isGreater); + } + } +} \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java index 5180b11b038b..a819e5c3a82a 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java @@ -495,8 +495,8 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo if (getAccumulatedVariable(tb, nonFinalVariables, SUM_OPERATION) != null) { return new SumMigration(true); } - FindExtremumMigration.ExtremumTerminal extremumTerminal = FindExtremumMigration.extractExtremumTerminal(tb); - if(extremumTerminal != null) { + FindExtremumMigration.ExtremumTerminal extremumTerminal = FindExtremumMigration.extract(tb); + if(extremumTerminal != null && extremumTerminal.getNonFinalVariableCount() == nonFinalVariables.size()) { return new FindExtremumMigration(true, extremumTerminal.isMax()? MAX_REPLACEMENT : MIN_REPLACEMENT); } for (OperationReductionMigration.ReductionOperation reductionOperation : OperationReductionMigration.OPERATIONS) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmp.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmp.java new file mode 100644 index 000000000000..79eaac5c40f6 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmp.java @@ -0,0 +1,34 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).filter(p -> p.getAge() >= 0).max(Comparator.comparingInt(Person::getAge)).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleVariable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleVariable.java index 595066150c08..841e83056f40 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleVariable.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleVariable.java @@ -4,7 +4,7 @@ import java.util.*; public class Main { public void max(int[] ints) { - int another; + int another = 1; int max = 0; for (int anInt : ints) { if(anInt < 10) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceTmp.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceTmp.java new file mode 100644 index 000000000000..76be73d2c984 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceTmp.java @@ -0,0 +1,43 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + int maxAge = 0; + for (Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null || maxAge < p.getAge()) { + maxAge = p.getAge() + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file From ad3e163095615b64979b86100bcc03fa542c4034 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Thu, 27 Jul 2017 10:42:16 +0700 Subject: [PATCH 12/28] simplify : IDEA-CR-23237 --- .../FindExtremumMigration.java | 32 ++++--------------- 1 file changed, 6 insertions(+), 26 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 6ed0de331564..2bf313d82430 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -359,32 +359,13 @@ public class FindExtremumMigration extends BaseStreamApiMigration { } @Nullable - private static PsiVariable extractNullCheckingVar(PsiExpression expression) { + private static PsiVariable extractNullCheckingVar(@NotNull PsiExpression expression) { PsiBinaryExpression binaryExpression = tryCast(expression, PsiBinaryExpression.class); - if (!binaryExpression.getOperationSign().getTokenType().equals(JavaTokenType.EQEQ)) { - return null; - } - PsiExpression lOperand = binaryExpression.getLOperand(); - PsiExpression rOperand = binaryExpression.getROperand(); - if (rOperand == null) return null; - - PsiVariable lVariable = extractNullCheckingVar(lOperand, rOperand); - if (lVariable != null) return lVariable; - PsiVariable rVariable = extractNullCheckingVar(rOperand, lOperand); - if (rVariable != null) return rVariable; - return null; - } - - @Nullable - private static PsiVariable extractNullCheckingVar(PsiExpression first, PsiExpression second) { - PsiReferenceExpression lReference = tryCast(first, PsiReferenceExpression.class); - if (lReference != null) { - PsiVariable variable = tryCast(lReference.resolve(), PsiVariable.class); - if (variable != null && second.getText().equals("null")) { - return variable; - } - } - return null; + if(binaryExpression == null) return null; + PsiExpression valueComparedWithNull = ExpressionUtils.getValueComparedWithNull(binaryExpression); + PsiReferenceExpression referenceExpression = tryCast(valueComparedWithNull, PsiReferenceExpression.class); + if (referenceExpression == null) return null; + return tryCast(referenceExpression.resolve(), PsiVariable.class); } @Nullable @@ -518,7 +499,6 @@ public class FindExtremumMigration extends BaseStreamApiMigration { PsiMethodCallExpression callExpression = (PsiMethodCallExpression)myExpression.copy(); PsiReferenceExpression qualifierReference = tryCast(callExpression.getMethodExpression().getQualifierExpression(), PsiReferenceExpression.class); - PsiVariable receiver = resolveMethodReceiver(callExpression); //noinspection ConstantConditions checked at creation ExpressionUtils.bindReferenceTo(qualifierReference, qualifierName); return callExpression; From 679f20c752723abeb48be18628701de081280242 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Thu, 27 Jul 2017 11:06:22 +0700 Subject: [PATCH 13/28] correct handling of declaration usage status : IDEA-CR-23237 --- .../BaseStreamApiMigration.java | 14 ++----- .../minMax/afterMaxPrimitive.java | 2 +- .../minMax/afterMaxReference1.java | 6 +-- .../minMax/afterMaxReference2.java | 2 +- .../minMax/afterMaxReference3.java | 2 +- .../minMax/afterMaxReference4.java | 2 +- .../minMax/afterMaxReference5.java | 2 +- .../minMax/afterMaxReferenceField.java | 2 +- .../minMax/afterMaxReferenceTmp.java | 2 +- .../minMax/afterMinPrimitive.java | 2 +- .../minMax/afterMinReference.java | 2 +- ...rMinReferenceInitializerNotJustBefore.java | 33 ++++++++++++++++ .../minMax/beforeMaxReference1.java | 4 +- ...eMinReferenceInitializerNotJustBefore.java | 39 +++++++++++++++++++ 14 files changed, 88 insertions(+), 26 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReferenceInitializerNotJustBefore.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReferenceInitializerNotJustBefore.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java index 2890796a2098..46cba24a9d6b 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java @@ -89,23 +89,17 @@ abstract class BaseStreamApiMigration { } + @Nullable static PsiElement replaceWithFindExtremum(@NotNull PsiLoopStatement loopStatement, @NotNull PsiVariable extremumHolder, @NotNull String streamText, @Nullable PsiVariable keyExtremum) { - PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(loopStatement.getProject()); restoreComments(loopStatement, loopStatement.getBody()); - removeLoop(loopStatement); if(keyExtremum != null) { - keyExtremum.delete(); // TODO check this - } - PsiExpression initializer = extremumHolder.getInitializer(); - if(initializer != null) { - PsiExpression streamExpression = elementFactory.createExpressionFromText(streamText, extremumHolder); // TODO cast expression if needed - return initializer.replace(streamExpression); - } else { - return null; // TODO remove extremum holder and create on this place all + keyExtremum.delete(); } + InitializerUsageStatus status = ControlFlowUtils.getInitializerUsageStatus(extremumHolder, loopStatement); + return replaceInitializer(loopStatement, extremumHolder, extremumHolder.getInitializer(), streamText, status); } static void restoreComments(PsiLoopStatement loopStatement, PsiStatement body) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java index 46924fb60f32..e95360866377 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java @@ -4,6 +4,6 @@ import java.util.*; public class Main { public void work(int[] ints) { - int max = Arrays.stream(ints).filter(anInt -> anInt < 10).filter(anInt -> anInt >= 0).max().orElse(0); + int max = Arrays.stream(ints).filter(anInt -> anInt < 10).filter(anInt -> anInt >= 0).max().orElse(0); } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference1.java index 94b3a39d1f41..3f94126247df 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference1.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference1.java @@ -21,14 +21,12 @@ public class Main { } } - public Person max() { + public Person work() { List personList = Arrays.asList( new Person("Roman", 21), new Person("James", 25), new Person("Kelly", 12) ); - Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); - - return maxPerson; + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference2.java index 94b3a39d1f41..35e4495bf19f 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference2.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference2.java @@ -27,7 +27,7 @@ public class Main { new Person("James", 25), new Person("Kelly", 12) ); - Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); return maxPerson; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference3.java index 94b3a39d1f41..35e4495bf19f 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference3.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference3.java @@ -27,7 +27,7 @@ public class Main { new Person("James", 25), new Person("Kelly", 12) ); - Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); return maxPerson; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference4.java index 94b3a39d1f41..35e4495bf19f 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference4.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference4.java @@ -27,7 +27,7 @@ public class Main { new Person("James", 25), new Person("Kelly", 12) ); - Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); return maxPerson; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference5.java index 94b3a39d1f41..35e4495bf19f 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference5.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference5.java @@ -27,7 +27,7 @@ public class Main { new Person("James", 25), new Person("Kelly", 12) ); - Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); return maxPerson; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceField.java index 9006abcbf36c..3681b02f6c80 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceField.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceField.java @@ -27,7 +27,7 @@ public class Main { new Person("James", 25), new Person("Kelly", 12) ); - Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(p -> p.age)).orElse(null); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(p -> p.age)).orElse(null); return maxPerson; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmp.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmp.java index 79eaac5c40f6..4d0ea8ccf7fe 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmp.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmp.java @@ -27,7 +27,7 @@ public class Main { new Person("James", 25), new Person("Kelly", 12) ); - Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).filter(p -> p.getAge() >= 0).max(Comparator.comparingInt(Person::getAge)).orElse(null); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).filter(p -> p.getAge() >= 0).max(Comparator.comparingInt(Person::getAge)).orElse(null); return maxPerson; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitive.java index d69c05c2e2d0..e4f443700d16 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitive.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitive.java @@ -4,6 +4,6 @@ import java.util.*; public class Main { public void work(int[] ints) { - int min = Arrays.stream(ints).filter(anInt -> anInt < 10).filter(anInt -> anInt <= 0).min().orElse(0); + int min = Arrays.stream(ints).filter(anInt -> anInt < 10).filter(anInt -> anInt <= 0).min().orElse(0); } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReference.java index 0c727d40dd58..6e7d045a3768 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReference.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReference.java @@ -27,7 +27,7 @@ public class Main { new Person("James", 25), new Person("Kelly", 12) ); - Person minPerson = personList.stream().filter(p -> p.getAge() > 13).min(Comparator.comparingInt(Person::getAge)).orElse(null); + Person minPerson = personList.stream().filter(p -> p.getAge() > 13).min(Comparator.comparingInt(Person::getAge)).orElse(null); return minPerson; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReferenceInitializerNotJustBefore.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReferenceInitializerNotJustBefore.java new file mode 100644 index 000000000000..36d620cc7b0d --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReferenceInitializerNotJustBefore.java @@ -0,0 +1,33 @@ +// "Replace with min()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + Person minPerson; + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + minPerson = personList.stream().filter(p -> p.getAge() > 13).min(Comparator.comparingInt(Person::getAge)).orElse(null); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference1.java index f5171b03b28c..7678e2a63708 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference1.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference1.java @@ -21,7 +21,7 @@ public class Main { } } - public Person max() { + public Person work() { List personList = Arrays.asList( new Person("Roman", 21), new Person("James", 25), @@ -35,7 +35,5 @@ public class Main { } } } - - return maxPerson; } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReferenceInitializerNotJustBefore.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReferenceInitializerNotJustBefore.java new file mode 100644 index 000000000000..b35aaacc05cb --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReferenceInitializerNotJustBefore.java @@ -0,0 +1,39 @@ +// "Replace with min()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + Person minPerson = null; + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + for (Person p : personList) { + if(p.getAge() > 13) { + if (minPerson == null || minPerson.getAge() > p.getAge()) { + minPerson = p; + } + } + } + } +} \ No newline at end of file From b6ac5ea4d6c19d2fa9a47c57aba1a01a483cef65 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Fri, 28 Jul 2017 12:47:08 +0700 Subject: [PATCH 14/28] refactor FindExtremum, now it recognize complex patterns : IDEA-CR-23237 --- .../FindExtremumMigration.java | 1127 +++++++---------- .../StreamApiMigrationInspection.java | 8 +- .../streamMigration/TerminalBlock.java | 4 +- .../afterMinPrimitiveNonTrivialSelector.java | 9 + .../beforeMinPrimitiveNonTrivialSelector.java | 14 + 5 files changed, 451 insertions(+), 711 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveNonTrivialSelector.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveNonTrivialSelector.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 2bf313d82430..882e0b51b1a9 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -18,21 +18,24 @@ package com.intellij.codeInspection.streamMigration; import com.intellij.openapi.project.Project; import com.intellij.psi.*; -import com.intellij.psi.codeStyle.JavaCodeStyleManager; +import com.intellij.psi.search.LocalSearchScope; +import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.tree.IElementType; import com.siyeh.ig.psiutils.ControlFlowUtils; import com.siyeh.ig.psiutils.EquivalenceChecker; import com.siyeh.ig.psiutils.ExpressionUtils; +import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; + import static com.intellij.util.ObjectUtils.tryCast; public class FindExtremumMigration extends BaseStreamApiMigration { - static final String MAX_REPLACEMENT = "max()"; - static final String MIN_REPLACEMENT = "min()"; - + private static final String MAX_OP = "max"; + private static final String MIN_OP = "min"; private static final EquivalenceChecker ourEquivalence = EquivalenceChecker.getCanonicalPsiEquivalence(); protected FindExtremumMigration(boolean shouldWarn, String replacement) { @@ -41,53 +44,15 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @Override PsiElement migrate(@NotNull Project project, @NotNull PsiStatement body, @NotNull TerminalBlock tb) { - ExtremumTerminal terminal = extract(tb); + ExtremumTerminal terminal = extract(tb, null); if (terminal == null) return null; - String operation = terminal.isMax() ? "max" : "min"; - - KeySelector keySelector = terminal.getKeySelector(); - PsiVariable currentVariable = - terminal.getLoopVariable(); - JavaCodeStyleManager javaStyle = JavaCodeStyleManager.getInstance(project); - String name = currentVariable.getName(); - if (name == null) name = "x"; - javaStyle.suggestUniqueVariableName(name, body, true); - String lambdaText = keySelector.buildLambda(name); - PsiType lambdaReturnType = keySelector.selectedKeyType(); - String comparingMethod = getComparingMethod(lambdaReturnType); - if (comparingMethod == null) return null; - String comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + comparingMethod + "(" + lambdaText + ")"; - - TerminalBlock terminalBlock = terminal.getTerminalBlock(); - - String stream = buildStreamText(terminal, operation, comparator, name, terminalBlock); - PsiLoopStatement loop = terminalBlock.getMainLoop(); - return replaceWithFindExtremum(loop, terminal.getExtremumHolder(), stream, terminal.getKeyExtremum()); + return terminal.replace(); } + @Contract(pure = true) @NotNull - String buildStreamText(@NotNull ExtremumTerminal terminal, - @NotNull String operation, - @NotNull String comparator, - @NotNull String varName, - @NotNull TerminalBlock terminalBlock) { - String startingValue; - String filterOp; - if (terminal.getKeySelectorInitializer() != null) { - PsiExpression initializer = terminal.getKeySelectorInitializer(); - startingValue = initializer.getText(); - String keySelectorText = terminal.getKeySelector().buildExpression(varName).getText(); - String inFilterOperation = terminal.isMax() ? ">=" : "<="; - filterOp = ".filter(" + varName + "->" + keySelectorText + inFilterOperation + startingValue + ")"; - } - else { - startingValue = ""; - filterOp = ""; - } - if (terminal.isPrimitive()) { - return terminalBlock.generate() + filterOp + "." + operation + "().orElse(" + startingValue + ")"; - } - return terminalBlock.generate() + filterOp + "." + operation + "(" + comparator + ").orElse(null)"; + static String getOpertion(boolean isMax) { + return isMax ? MAX_OP : MIN_OP; } @Nullable @@ -99,7 +64,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { } @Nullable - static ExtremumTerminal extract(@NotNull TerminalBlock terminalBlock) { + static ExtremumTerminal extract(@NotNull TerminalBlock terminalBlock, @Nullable List nonFinalVariables) { PsiStatement[] statements = terminalBlock.getStatements(); StreamApiMigrationInspection.Operation operation = terminalBlock.getLastOperation(); StreamApiMigrationInspection.FilterOp filterOp = tryCast(operation, StreamApiMigrationInspection.FilterOp.class); @@ -107,15 +72,15 @@ public class FindExtremumMigration extends BaseStreamApiMigration { TerminalBlock block = terminalBlock.withoutLastOperation(); if (block != null) { PsiExpression condition = filterOp.getExpression(); - ExtremumTerminal simpleRefCase = extractSimpleRefCase(condition, statements, block); + ExtremumTerminal simpleRefCase = extractSimpleRefCase(condition, statements, block, nonFinalVariables); if (simpleRefCase != null) return simpleRefCase; - ExtremumTerminal primitiveCase = extractSimplePrimitiveCase(condition, statements, block); + ExtremumTerminal primitiveCase = PrimitiveExtremumTerminal.extract(condition, statements, block, nonFinalVariables); if (primitiveCase != null) return primitiveCase; - ExtremumTerminal complexRefCase = extractComplexRefCase(condition, statements, block); + ExtremumTerminal complexRefCase = extractComplexRefCase(condition, statements, block, nonFinalVariables); if (complexRefCase != null) return complexRefCase; } } - return extractIfElseCase(statements, terminalBlock); + return extractIfElseCase(statements, terminalBlock, nonFinalVariables); } //if(maxPerson == null) { @@ -125,7 +90,8 @@ public class FindExtremumMigration extends BaseStreamApiMigration { //} @Nullable static private ExtremumTerminal extractIfElseCase(@NotNull PsiStatement[] statements, - @NotNull TerminalBlock terminalBlock) { + @NotNull TerminalBlock terminalBlock, + @Nullable List nonNullVariables) { if (statements.length != 1) return null; PsiStatement statement = statements[0]; PsiIfStatement ifStatement = tryCast(statement, PsiIfStatement.class); @@ -135,22 +101,23 @@ public class FindExtremumMigration extends BaseStreamApiMigration { PsiStatement thenBranch = unwrapIfBranchToStatement(ifStatement.getThenBranch()); PsiStatement elseBranch = unwrapIfBranchToStatement(ifStatement.getElseBranch()); if (thenBranch == null || elseBranch == null) return null; - return extractIfElseCase(thenBranch, thenCondition, elseBranch, terminalBlock); + return extractIfElseCase(thenBranch, thenCondition, elseBranch, terminalBlock, nonNullVariables); } @Nullable static private ExtremumTerminal extractIfElseCase(@NotNull PsiStatement thenBranch, @NotNull PsiExpression thenCondition, @NotNull PsiStatement elseBranch, - @NotNull TerminalBlock terminalBlock) { + @NotNull TerminalBlock terminalBlock, + @Nullable List nonNullVariables) { PsiIfStatement elseIfStatement = tryCast(elseBranch, PsiIfStatement.class); if (elseIfStatement == null || elseIfStatement.getElseBranch() != null) return null; PsiExpression elseIfCondition = elseIfStatement.getCondition(); PsiStatement elseIf = unwrapIfBranchToStatement(elseIfStatement.getThenBranch()); if (elseIf == null || elseIfCondition == null) return null; - ExtremumTerminal firstWay = extractIfElseCase(thenBranch, thenCondition, elseIf, elseIfCondition, terminalBlock); + ExtremumTerminal firstWay = extractIfElseCase(thenBranch, thenCondition, elseIf, elseIfCondition, terminalBlock, nonNullVariables); if (firstWay != null) return firstWay; - return extractIfElseCase(elseIf, elseIfCondition, thenBranch, thenCondition, terminalBlock); + return extractIfElseCase(elseIf, elseIfCondition, thenBranch, thenCondition, terminalBlock, nonNullVariables); } @Nullable @@ -158,9 +125,11 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @NotNull PsiExpression nullCheckExpr, @NotNull PsiStatement comparisionBranch, @NotNull PsiExpression comparisionExpr, - @NotNull TerminalBlock terminalBlock) { + @NotNull TerminalBlock terminalBlock, + @Nullable List nonNullVariables) { if (!ourEquivalence.statementsAreEquivalent(nullCheckBranch, comparisionBranch)) return null; - return extractSimpleRefCase(nullCheckExpr, comparisionExpr, new PsiStatement[]{comparisionBranch}, terminalBlock); + return SimpleRefExtremumTerminal + .extract(nullCheckExpr, comparisionExpr, new PsiStatement[]{comparisionBranch}, terminalBlock, nonNullVariables); } @Nullable @@ -179,727 +148,477 @@ public class FindExtremumMigration extends BaseStreamApiMigration { return new PsiStatement[]{statement}; } - //Person maxPerson = null; - //int maxAge = Integer.MIN_VALUE; - //for (Person person : personList) { - // if (maxPerson == null || maxAge < person.getAge()) { - // maxPerson = person; - // maxAge = person.getAge(); - // } - //} @Nullable static private ExtremumTerminal extractComplexRefCase(@NotNull PsiExpression condition, @NotNull PsiStatement[] statements, - @NotNull TerminalBlock terminalBlock) { - return extractRefCase(condition, statements, terminalBlock, FindExtremumMigration::extractComplexRefCase); - } - - @Nullable - static private ExtremumTerminal extractComplexRefCase(@NotNull PsiExpression nullCheckExpr, - @NotNull PsiExpression comparisionExpr, - @NotNull PsiStatement[] statements, - @NotNull TerminalBlock terminalBlock) { - PsiBinaryExpression nullCheckBinary = tryCast(nullCheckExpr, PsiBinaryExpression.class); - if (nullCheckBinary == null) return null; - PsiVariable nullCheckingVar = extractNullCheckingVar(nullCheckBinary); - if (nullCheckingVar == null) return null; - Comparision comparision = Comparision.extract(comparisionExpr); - if (comparision == null) return null; - ComplexAssignment complexAssignment = ComplexAssignment.extractComplex(statements); - if (complexAssignment == null) return null; - Boolean isMax = isMax(complexAssignment, comparision); - if (isMax == null || - !useSameVariables(complexAssignment, comparision, isMax) || - changedBeforeLoop(complexAssignment.getExtremumHolder(), terminalBlock) || - changedBeforeLoop(complexAssignment.getExtremumKey(), terminalBlock) || - !terminalBlock.getVariable().equals(complexAssignment.getLoopVariable())) { - return null; - } - - PsiExpression keyInitializer = complexAssignment.getExtremumKey().getInitializer(); - PsiExpression extremumHolderInitializer = complexAssignment.getExtremumHolder().getInitializer(); - if (!ExpressionUtils.isNullLiteral(extremumHolderInitializer)) return null; - if (ExpressionUtils.computeConstantExpression(keyInitializer) == null) return null; - - return new ExtremumTerminal(2, false, isMax, complexAssignment.getExtremumKeySelector(), complexAssignment.getLoopVariable(), - complexAssignment.getExtremumHolder(), terminalBlock, keyInitializer, complexAssignment.getExtremumKey()); - } - - //if(max < anInt) { - //max = anInt; - //} - @Nullable - private static ExtremumTerminal extractSimplePrimitiveCase(@NotNull PsiExpression condition, - @NotNull PsiStatement[] statements, - @NotNull TerminalBlock terminalBlock) { - Comparision comparision = Comparision.extract(condition); - if (comparision == null) return null; - SimpleAssignment assignment = SimpleAssignment.extractSimple(statements); - if (assignment == null) return null; - if (!(comparision.getFirstSelector() instanceof VariableKeySelector) || - !(comparision.getSecondSelector() instanceof VariableKeySelector)) { - return null; - } - Boolean max = isMax(assignment, comparision); - if (max == null || - !useSameVariables(assignment, comparision, max) || - changedBeforeLoop(comparision.getExtremumHolderSelector(max).getVariable(), terminalBlock) || - !terminalBlock.getVariable().equals(assignment.getLoopVariable())) { - return null; - } - - KeySelector extremumHolderSelector = comparision.getExtremumHolderSelector(max); - PsiVariable extremumHolder = extremumHolderSelector.getVariable(); - PsiExpression initializer = extremumHolder.getInitializer(); - if (ExpressionUtils.computeConstantExpression(initializer) == null) return null; - return new ExtremumTerminal(1, true, max, extremumHolderSelector, assignment.getLoopVariable(), - assignment.getExtremumHolder(), terminalBlock, initializer, null); + @NotNull TerminalBlock terminalBlock, + @Nullable List nonFinalVariables) { + return extractRefCase(condition, statements, terminalBlock, FindExtremumMigration.ComplexExtremumTerminal::extract, nonFinalVariables); } @Nullable static private ExtremumTerminal extractSimpleRefCase(@NotNull PsiExpression condition, @NotNull PsiStatement[] statements, - @NotNull TerminalBlock terminalBlock) { - return extractRefCase(condition, statements, terminalBlock, FindExtremumMigration::extractSimpleRefCase); + @NotNull TerminalBlock terminalBlock, + @Nullable List nonFinalVariables) { + return extractRefCase(condition, statements, terminalBlock, FindExtremumMigration.SimpleRefExtremumTerminal::extract, + nonFinalVariables); } @Nullable static private ExtremumTerminal extractRefCase(@NotNull PsiExpression condition, @NotNull PsiStatement[] statements, @NotNull TerminalBlock terminalBlock, - @NotNull Extractor extractor) { + @NotNull Extractor extractor, + @Nullable List nonFinalVariables) { PsiBinaryExpression binaryExpression = tryCast(condition, PsiBinaryExpression.class); if (binaryExpression == null) return null; IElementType sign = binaryExpression.getOperationSign().getTokenType(); PsiExpression lOperand = binaryExpression.getLOperand(); PsiExpression rOperand = binaryExpression.getROperand(); if (!sign.equals(JavaTokenType.OROR) || rOperand == null) return null; - ExtremumTerminal firstWay = extractor.extractOriented(lOperand, rOperand, statements, terminalBlock); + ExtremumTerminal firstWay = extractor.extractOriented(lOperand, rOperand, statements, terminalBlock, nonFinalVariables); if (firstWay != null) return firstWay; - return extractor.extractOriented(rOperand, lOperand, statements, terminalBlock); + return extractor.extractOriented(rOperand, lOperand, statements, terminalBlock, nonFinalVariables); } - @Nullable - static private ExtremumTerminal extractSimpleRefCase(@NotNull PsiExpression nullCheckExpr, - @NotNull PsiExpression comparisionExpr, - @NotNull PsiStatement[] statements, - @NotNull TerminalBlock terminalBlock) { - PsiBinaryExpression nullCheckBinary = tryCast(nullCheckExpr, PsiBinaryExpression.class); - if (nullCheckBinary == null) return null; - PsiVariable nullCheckingVar = extractNullCheckingVar(nullCheckBinary); - if (nullCheckingVar == null) return null; - Comparision comparision = Comparision.extract(comparisionExpr); - if (comparision == null) return null; - SimpleAssignment simpleAssignment = SimpleAssignment.extractSimple(statements); - if (simpleAssignment == null) return null; - Boolean isMax = isMax(simpleAssignment, comparision); - if (isMax == null || - !useSameVariables(simpleAssignment, comparision, isMax) || - changedBeforeLoop(simpleAssignment.getExtremumHolder(), terminalBlock) || - !terminalBlock.getVariable().equals(simpleAssignment.getLoopVariable())) return null; - PsiVariable loopVariable = comparision.getLoopVariableKeySelector(isMax).getVariable(); - PsiVariable extremumHolder = comparision.getExtremumHolderSelector(isMax).getVariable(); - PsiExpression initializer = extremumHolder.getInitializer(); - if (!ExpressionUtils.isNullLiteral(initializer)) return null; - return new ExtremumTerminal(1, false, isMax, comparision.getFirstSelector(), loopVariable, extremumHolder, - terminalBlock, null, null); + static private boolean containsAnyVariable(@NotNull PsiExpression expression, @NotNull List variables) { + for (PsiVariable variable : variables) { + if (ReferencesSearch.search(variable, new LocalSearchScope(expression)).findFirst() != null) return true; + } + return false; } - static private boolean changedBeforeLoop(@NotNull PsiVariable variable, - @NotNull TerminalBlock terminalBlock) { + static private boolean mayChangeBeforeLoop(@NotNull PsiVariable variable, + @NotNull TerminalBlock terminalBlock) { ControlFlowUtils.InitializerUsageStatus status = ControlFlowUtils.getInitializerUsageStatus(variable, terminalBlock.getMainLoop()); return status.equals(ControlFlowUtils.InitializerUsageStatus.UNKNOWN); } - // if (maxPerson == null || maxAge < person.getAge()) { - // maxPerson = person; - // maxAge = person.getAge(); - static private boolean useSameVariables(ComplexAssignment complexAssignment, Comparision comparision, boolean isMax) { - PsiExpression extremumKeySelectorExpression = complexAssignment.getExtremumKeySelector().getExpression(); - PsiExpression loopVarKeySelector = comparision.getLoopVariableKeySelector(isMax).getExpression(); - PsiVariable loopVariable = comparision.getLoopVariableKeySelector(isMax).getVariable(); - PsiVariable extremumHolder = comparision.getExtremumHolderSelector(isMax).getVariable(); // maxAge - return complexAssignment.getLoopVariable().equals(loopVariable) && - complexAssignment.getExtremumKey().equals(extremumHolder) && - comparision.getExtremumHolderSelector(isMax) instanceof VariableKeySelector && - ourEquivalence.expressionsAreEquivalent(extremumKeySelectorExpression, loopVarKeySelector); - } - - static private boolean useSameVariables(SimpleAssignment simpleAssignment, Comparision comparision, boolean isMax) { - return simpleAssignment.getExtremumHolder().equals(comparision.getExtremumHolderSelector(isMax).getVariable()) && - simpleAssignment.getLoopVariable().equals(comparision.getLoopVariableKeySelector(isMax).getVariable()); - } - @Nullable - static private Boolean isMax(SimpleAssignment assignment, Comparision comparision) { - if (assignment.getExtremumHolder().equals(comparision.getFirstSelector().getVariable())) { - return !comparision.isGreater(); - } - else if (assignment.getExtremumHolder().equals(comparision.getSecondSelector().getVariable())) { - return comparision.isGreater(); - } - else { - return null; - } - } - - @Nullable - static private Boolean isMax(ComplexAssignment assignment, Comparision comparision) { - if (assignment.getExtremumKey().equals(comparision.getFirstSelector().getVariable())) { - return !comparision.isGreater(); - } - else if (assignment.getExtremumKey().equals(comparision.getSecondSelector().getVariable())) { - return comparision.isGreater(); - } - else { - return null; - } - } - - @Nullable - private static PsiVariable extractNullCheckingVar(@NotNull PsiExpression expression) { - PsiBinaryExpression binaryExpression = tryCast(expression, PsiBinaryExpression.class); - if(binaryExpression == null) return null; - PsiExpression valueComparedWithNull = ExpressionUtils.getValueComparedWithNull(binaryExpression); - PsiReferenceExpression referenceExpression = tryCast(valueComparedWithNull, PsiReferenceExpression.class); - if (referenceExpression == null) return null; - return tryCast(referenceExpression.resolve(), PsiVariable.class); - } - - @Nullable - static PsiVariable getVariable(@NotNull PsiExpression expression) { + static PsiVariable getVariable(@Nullable PsiExpression expression) { PsiReferenceExpression referenceExpression = tryCast(expression, PsiReferenceExpression.class); if (referenceExpression == null) return null; return tryCast(referenceExpression.resolve(), PsiVariable.class); } - - @Nullable - private static PsiVariable resolveMethodReceiver(@NotNull PsiExpression expression) { - PsiMethodCallExpression methodCallExpression = tryCast(expression, PsiMethodCallExpression.class); - if (methodCallExpression == null) return null; - PsiExpression qualifierExpression = methodCallExpression.getMethodExpression().getQualifierExpression(); - PsiReferenceExpression reference = tryCast(qualifierExpression, PsiReferenceExpression.class); - if (reference == null) return null; - return tryCast(reference.resolve(), PsiVariable.class); + private static boolean equalShape(@NotNull PsiExpression first, + @NotNull PsiExpression second, + @NotNull String firstExprVarName, + @NotNull PsiVariable secondExprVariable) { + PsiExpression secondCopy = (PsiExpression)second.copy(); + for (PsiReference ref : ReferencesSearch.search(secondExprVariable, new LocalSearchScope(secondCopy))) { + if (ref instanceof PsiReferenceExpression) ExpressionUtils.bindReferenceTo((PsiReferenceExpression)ref, firstExprVarName); + } + return ourEquivalence.expressionsAreEquivalent(first, secondCopy); } - @Nullable - private static PsiMethod resolveMethod(@NotNull PsiExpression expression) { - PsiMethodCallExpression methodCallExpression = tryCast(expression, PsiMethodCallExpression.class); - if (methodCallExpression == null) return null; - PsiReferenceExpression methodExpression = methodCallExpression.getMethodExpression(); - PsiElement resolvedMethod = methodExpression.resolve(); - return tryCast(resolvedMethod, PsiMethod.class); - } + interface ExtremumTerminal { + @Nullable + PsiElement replace(); - private static boolean isCorrectType(@NotNull PsiType type) { - return type.equals(PsiType.INT) || type.equals(PsiType.LONG) || type.equals(PsiType.DOUBLE); + boolean isMax(); } + @FunctionalInterface interface Extractor { @Nullable ExtremumTerminal extractOriented(@NotNull PsiExpression nullCheckExpr, @NotNull PsiExpression comparisionExpr, @NotNull PsiStatement[] statements, - @NotNull TerminalBlock terminalBlock); + @NotNull TerminalBlock terminalBlock, + @Nullable List nonFinalVars); } - interface KeySelector { - /** - * @param varName that can be used in comparator lambda - * @return lambda text to create comparator - */ - @NotNull - String buildLambda(@NotNull String varName); - - /** - * @return type of selected key to be compared - */ - @NotNull - PsiType selectedKeyType(); - - /** - * @return variable used in original key selection expression - */ - @NotNull - PsiVariable getVariable(); - - /** - * @return original key selection expression - */ - @NotNull - PsiExpression getExpression(); - - @NotNull - PsiExpression buildExpression(@NotNull String qualifierName); - - boolean equalShape(@NotNull KeySelector keySelector); - - @Nullable - static KeySelector extractSelector(@NotNull PsiExpression expression) { - MethodKeySelector methodKeySelector = MethodKeySelector.extract(expression); - if (methodKeySelector != null && isCorrectType(methodKeySelector.selectedKeyType())) return methodKeySelector; - FieldKeySelector fieldKeySelector = FieldKeySelector.extract(expression); - if (fieldKeySelector != null && isCorrectType(fieldKeySelector.selectedKeyType())) return fieldKeySelector; - VariableKeySelector variableKeySelector = VariableKeySelector.extract(expression); - if (variableKeySelector != null && isCorrectType(variableKeySelector.selectedKeyType())) return variableKeySelector; - return null; - } - } - - static class MethodKeySelector implements KeySelector { - private final @NotNull PsiMethod myMethod; - private final @NotNull PsiMethodCallExpression myExpression; - private final @NotNull PsiVariable myVariable; - @NotNull private final PsiClass myContainingClass; - @NotNull private final PsiType myType; - - MethodKeySelector(@NotNull PsiMethod method, - @NotNull PsiMethodCallExpression expression, - @NotNull PsiVariable variable, - @NotNull PsiClass containingClass, - @NotNull PsiType type) { - myMethod = method; - myExpression = expression; - myVariable = variable; - myContainingClass = containingClass; - myType = type; - } - - @NotNull - @Override - public String buildLambda(@NotNull String varName) { - return myContainingClass.getQualifiedName() + "::" + myMethod.getName(); - } - - @NotNull - @Override - public PsiType selectedKeyType() { - return myType; - } - - @NotNull - @Override - public PsiVariable getVariable() { - return myVariable; - } - - @NotNull - @Override - public PsiExpression getExpression() { - return myExpression; - } - - @NotNull - @Override - public PsiExpression buildExpression(@NotNull String qualifierName) { - PsiMethodCallExpression callExpression = (PsiMethodCallExpression)myExpression.copy(); - PsiReferenceExpression qualifierReference = - tryCast(callExpression.getMethodExpression().getQualifierExpression(), PsiReferenceExpression.class); - //noinspection ConstantConditions checked at creation - ExpressionUtils.bindReferenceTo(qualifierReference, qualifierName); - return callExpression; - } - - @Override - public boolean equalShape(@NotNull KeySelector keySelector) { - return keySelector instanceof MethodKeySelector && - ((MethodKeySelector)keySelector).myMethod.equals(myMethod); - } - - @Nullable - static MethodKeySelector extract(@NotNull PsiExpression expression) { - PsiMethod method = resolveMethod(expression); - if (method == null) return null; - PsiVariable receiver = resolveMethodReceiver(expression); - if (receiver == null) return null; - PsiClass containingClass = method.getContainingClass(); - if (containingClass == null) return null; - PsiType returnType = method.getReturnType(); - if (returnType == null) return null; - PsiMethodCallExpression methodCallExpression = tryCast(expression, PsiMethodCallExpression.class); - if (methodCallExpression == null) return null; - PsiExpression qualifierExpression = methodCallExpression.getMethodExpression().getQualifierExpression(); - if (qualifierExpression == null) return null; - if(tryCast(qualifierExpression, PsiReferenceExpression.class) == null) return null; - return new MethodKeySelector(method, methodCallExpression, receiver, containingClass, returnType); - } - } - - private static class VariableKeySelector implements KeySelector { - private final PsiVariable myVariable; - private final PsiReferenceExpression myReferenceExpression; - - private VariableKeySelector(PsiVariable variable, PsiReferenceExpression expression) { - myVariable = variable; - myReferenceExpression = expression; - } - - @NotNull - @Override - public String buildLambda(@NotNull String varName) { - String variableText = myVariable.getText(); - return variableText + "->" + variableText; - } - - @NotNull - @Override - public PsiType selectedKeyType() { - return myVariable.getType(); - } - - @NotNull - @Override - public PsiVariable getVariable() { - return myVariable; - } - - @NotNull - @Override - public PsiExpression getExpression() { - return myReferenceExpression; - } - - @NotNull - @Override - public PsiExpression buildExpression(@NotNull String qualifierName) { - PsiReferenceExpression referenceExpression = (PsiReferenceExpression)myReferenceExpression.copy(); - ExpressionUtils.bindReferenceTo(referenceExpression, qualifierName); - return referenceExpression; - } - - @Override - public boolean equalShape(@NotNull KeySelector keySelector) { - return keySelector instanceof VariableKeySelector; - } - - @Nullable - static VariableKeySelector extract(@NotNull PsiExpression expression) { - PsiReferenceExpression referenceExpression = tryCast(expression, PsiReferenceExpression.class); - if (referenceExpression == null) return null; - PsiVariable variable = tryCast(referenceExpression.resolve(), PsiVariable.class); - if (variable == null) return null; - return new VariableKeySelector(variable, referenceExpression); - } - } - - private static class FieldKeySelector implements KeySelector { - private final @NotNull PsiField myField; - private final @NotNull PsiVariable myVariable; - private final @NotNull PsiReferenceExpression myReferenceExpression; - - private FieldKeySelector(@NotNull PsiField field, - @NotNull PsiVariable variable, - @NotNull PsiReferenceExpression referenceExpression) { - myField = field; - myVariable = variable; - myReferenceExpression = referenceExpression; - } - - @NotNull - @Override - public String buildLambda(@NotNull String varName) { - return varName + "->" + varName + "." + myField.getName(); - } - - @NotNull - @Override - public PsiType selectedKeyType() { - return myField.getType(); - } - - @NotNull - @Override - public PsiVariable getVariable() { - return myVariable; - } - - @NotNull - @Override - public PsiExpression getExpression() { - return myReferenceExpression; - } - - @NotNull - @Override - public PsiExpression buildExpression(@NotNull String referenceName) { - PsiReferenceExpression copy = (PsiReferenceExpression)myReferenceExpression.copy(); - //noinspection ConstantConditions - checked at creation - ExpressionUtils.bindReferenceTo(copy, referenceName); - return copy; - } - - @Override - public boolean equals(Object obj) { - return obj instanceof FieldKeySelector && ((FieldKeySelector)obj).myField.equals(myField); - } - - @Override - public boolean equalShape(@NotNull KeySelector keySelector) { - return keySelector instanceof FieldKeySelector && ((FieldKeySelector)keySelector).myField.equals(myField); - } - - @Nullable - static FieldKeySelector extract(@NotNull PsiExpression expression) { - PsiReferenceExpression referenceExpression = tryCast(expression, PsiReferenceExpression.class); - if (referenceExpression == null) return null; - PsiField field = tryCast(referenceExpression.resolve(), PsiField.class); - if (field == null) return null; - PsiElement qualifier = referenceExpression.getQualifier(); - if (referenceExpression.getQualifierExpression() == null) return null; - PsiReference reference = tryCast(qualifier, PsiReference.class); - if (reference == null) return null; - PsiVariable variable = tryCast(reference.resolve(), PsiVariable.class); - if (variable == null) return null; - return new FieldKeySelector(field, variable, referenceExpression); - } - } - - static class ExtremumTerminal { - private final int myNonFinalVariableCount; - private final boolean isPrimitive; - private final boolean isMax; - private final @NotNull KeySelector myKeySelector; - private final @NotNull PsiVariable myLoopVariable; - private final @NotNull PsiVariable myExtremumHolder; + //Person maxPerson = null; + //int maxAge = 0; + //for (Person person : personList) { + // if (maxPerson == null || maxAge < person.getAge()) { + // maxPerson = person; + // maxAge = person.getAge(); + // } + //} + private static class ComplexExtremumTerminal implements ExtremumTerminal { + private final boolean myMax; + private final @NotNull PsiVariable myExtremum; + private final @NotNull PsiVariable myExtremumKey; + private final @NotNull PsiExpression myExtremumKeyInitializer; + private final @NotNull PsiExpression myExtremumKeyExpr; private final @NotNull TerminalBlock myTerminalBlock; - private final @Nullable PsiExpression myKeySelectorInitializer; - private final @Nullable PsiVariable myKeyExtremum; - public ExtremumTerminal(int nonFinalVariableCount, - boolean isPrimitive, - boolean isMax, - @NotNull KeySelector keySelector, - @NotNull PsiVariable loopVariable, - @NotNull PsiVariable extremumHolder, - @NotNull TerminalBlock block, @Nullable PsiExpression initializer, @Nullable PsiVariable keyExtremum) { - myNonFinalVariableCount = nonFinalVariableCount; - this.isPrimitive = isPrimitive; - this.isMax = isMax; - myKeySelector = keySelector; - myLoopVariable = loopVariable; - myExtremumHolder = extremumHolder; + private ComplexExtremumTerminal(boolean max, + @NotNull PsiVariable extremum, + @NotNull PsiVariable extremumKey, + @NotNull PsiExpression extremumKeyInitializer, + @NotNull PsiExpression extremumKeyExpr, + @NotNull TerminalBlock block) { + myMax = max; + myExtremum = extremum; + myExtremumKey = extremumKey; + myExtremumKeyInitializer = extremumKeyInitializer; + myExtremumKeyExpr = extremumKeyExpr; myTerminalBlock = block; - myKeySelectorInitializer = initializer; - myKeyExtremum = keyExtremum; } - public int getNonFinalVariableCount() { - return myNonFinalVariableCount; + + @Nullable + @Override + public PsiElement replace() { + String inFilterOperation = myMax ? ">=" : "<="; + PsiLoopStatement loop = myTerminalBlock.getMainLoop(); + PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(loop.getProject()); + String extremumInitializer = myExtremumKeyInitializer.getText(); + String name = myTerminalBlock.getVariable().getName(); + if (name == null) return null; + PsiExpression condition = + elementFactory.createExpressionFromText(myExtremumKeyExpr.getText() + inFilterOperation + extremumInitializer, loop); + TerminalBlock blockWithFilter = + myTerminalBlock.add(new StreamApiMigrationInspection.FilterOp(condition, myTerminalBlock.getVariable(), false)); + + PsiType loopVarExpressionType = myExtremumKeyExpr.getType(); + if (loopVarExpressionType == null) return null; + String method = getComparingMethod(loopVarExpressionType); + if (method == null) return null; + String lambdaText = name + "->" + myExtremumKeyExpr.getText(); + String comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + method + "(" + lambdaText + ")"; + String stream = blockWithFilter.generate() + "." + getOpertion(myMax) + "(" + comparator + ").orElse(null)"; + return replaceWithFindExtremum(myTerminalBlock.getMainLoop(), myExtremum, stream, myExtremumKey); } - public boolean isPrimitive() { - return isPrimitive; + @Override + public boolean isMax() { + return myMax; + } + + @Nullable + private static ComplexExtremumTerminal extract(@NotNull PsiExpression nullCheckExpr, + @NotNull PsiExpression comparisonExpr, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock, + @Nullable List nonFinalVariables) { + Comparison comparison = Comparison.extract(comparisonExpr, terminalBlock.getVariable()); + if (comparison == null) return null; + + PsiBinaryExpression nullCheckBinary = tryCast(nullCheckExpr, PsiBinaryExpression.class); + if (nullCheckBinary == null) return null; + PsiVariable extremumNullChecked = ExpressionUtils.getVariableFromNullComparison(nullCheckBinary, true); + + if (extremumNullChecked == null) return null; + ComplexAssignment assignment = ComplexAssignment.extract(statements, extremumNullChecked); + if (assignment == null) return null; + if (!assignment.getLoopVar().equals(terminalBlock.getVariable())) return null; + PsiVariable extremumKey = getVariable(comparison.getExtremumExpr()); + if (extremumKey == null) return null; + if (!extremumKey.equals(assignment.getExtremumKey())) return null; + PsiVariable extremum = assignment.getExtremum(); + if (mayChangeBeforeLoop(extremumKey, terminalBlock) || + mayChangeBeforeLoop(extremum, terminalBlock)) { + return null; + } + + PsiExpression loopVarExpr = comparison.getLoopVarExpr(); + if (!ourEquivalence.expressionsAreEquivalent(assignment.getLoopVarExpression(), loopVarExpr)) return null; + if (nonFinalVariables != null) { + if (containsAnyVariable(assignment.getLoopVarExpression(), nonFinalVariables)) return null; + } + + PsiExpression extremumInitializer = extremum.getInitializer(); + PsiExpression extremumKeyInitializer = extremumKey.getInitializer(); + if (extremumInitializer == null || extremumKeyInitializer == null) return null; + if (!ExpressionUtils.isNullLiteral(extremumInitializer)) return null; + if (!ExpressionUtils.isEvaluatedAtCompileTime(extremumKeyInitializer)) return null; + return new ComplexExtremumTerminal(comparison.isMax(), extremum, extremumKey, extremumKeyInitializer, loopVarExpr, terminalBlock); + } + + private static class ComplexAssignment { + private @NotNull PsiVariable myExtremum; + private @NotNull PsiVariable myExtremumKey; + private @NotNull PsiVariable myLoopVar; // extremum = loopVar; + private @NotNull PsiExpression myLoopVarExpression; + + private ComplexAssignment(@NotNull PsiVariable extremum, + @NotNull PsiVariable extremumKey, + @NotNull PsiVariable loopVar, + @NotNull PsiExpression loopVarExpression) { + myExtremum = extremum; + myExtremumKey = extremumKey; + myLoopVar = loopVar; + myLoopVarExpression = loopVarExpression; + } + + @NotNull + public PsiVariable getExtremum() { + return myExtremum; + } + + @NotNull + public PsiVariable getExtremumKey() { + return myExtremumKey; + } + + @NotNull + public PsiVariable getLoopVar() { + return myLoopVar; + } + + @NotNull + public PsiExpression getLoopVarExpression() { + return myLoopVarExpression; + } + + @Nullable + private static ComplexAssignment extract(@NotNull PsiStatement[] statements, @NotNull PsiVariable nullCheckedExtremum) { + if (statements.length != 2) return null; + PsiStatement first = statements[0]; + PsiStatement second = statements[1]; + ComplexAssignment assignment = extract(first, second, nullCheckedExtremum); + if (assignment != null) return assignment; + return extract(second, first, nullCheckedExtremum); + } + + @Nullable + private static ComplexAssignment extract(@NotNull PsiStatement first, + @NotNull PsiStatement second, + @NotNull PsiVariable nullCheckedExtremum) { + PsiAssignmentExpression firstAssignment = ExpressionUtils.getAssignment(first); + PsiAssignmentExpression secondAssignment = ExpressionUtils.getAssignment(second); + PsiVariable extremum = getVariable(firstAssignment.getLExpression()); + PsiVariable loopVar = getVariable(firstAssignment.getRExpression()); + PsiVariable extremumKey = getVariable(secondAssignment.getLExpression()); + PsiExpression loopVarExpr = secondAssignment.getRExpression(); + if (extremum == null || extremumKey == null || loopVar == null || loopVarExpr == null) return null; + if (extremum != nullCheckedExtremum) return null; + return new ComplexAssignment(extremum, extremumKey, loopVar, loopVarExpr); + } + } + } + + //if(max < anInt) { + //max = anInt; + //} + private static class PrimitiveExtremumTerminal implements ExtremumTerminal { + private final boolean myMax; + private final @NotNull TerminalBlock myTerminalBlock; + private final @NotNull PsiExpression myLoopVarExpression; + private final @NotNull PsiVariable myExtremum; + private final @NotNull PsiExpression myExtremumInitializer; + + private PrimitiveExtremumTerminal(boolean max, + @NotNull TerminalBlock block, + @NotNull PsiExpression loopVarExpression, + @NotNull PsiVariable extremum, + @NotNull PsiExpression extremumInitializer) { + myMax = max; + myTerminalBlock = block; + myLoopVarExpression = loopVarExpression; + myExtremum = extremum; + myExtremumInitializer = extremumInitializer; + } + + + @Nullable + @Override + public PsiElement replace() { + //myTerminalBlock.generate() + TerminalBlock blockWithMap = myTerminalBlock + .add(new StreamApiMigrationInspection.MapOp(myLoopVarExpression, myTerminalBlock.getVariable(), myLoopVarExpression.getType())); + + String inFilterOperation = myMax ? ">=" : "<="; + PsiLoopStatement loop = blockWithMap.getMainLoop(); + PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(loop.getProject()); + String extremumInitializer = myExtremumInitializer.getText(); + // TODO not creating filter when Integer.MIN... + String name = myTerminalBlock.getVariable().getName(); + if (name == null) return null; + PsiExpression condition = + elementFactory.createExpressionFromText(name + inFilterOperation + extremumInitializer, loop); + + TerminalBlock blockWithFilter = + blockWithMap.add(new StreamApiMigrationInspection.FilterOp(condition, myTerminalBlock.getVariable(), false)); + String stream = blockWithFilter.generate() + "." + getOpertion(myMax) + "().orElse(" + extremumInitializer + ")"; + return replaceWithFindExtremum(loop, myExtremum, stream, null); + } + + + @Override + public boolean isMax() { + return myMax; + } + + + @Nullable + private static PrimitiveExtremumTerminal extract(@NotNull PsiExpression condition, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock, + @Nullable List nonFinalVariables) { + Comparison comparison = Comparison.extract(condition, terminalBlock.getVariable()); + if (comparison == null) return null; + if (statements.length != 1) return null; + PsiAssignmentExpression assignment = ExpressionUtils.getAssignment(statements[0]); + if (assignment == null) return null; + PsiVariable extremum = getVariable(assignment.getLExpression()); + if (extremum == null) return null; + PsiExpression assignmentLoopVarExpr = assignment.getRExpression(); + PsiExpression comparisonloopVarExpr = comparison.getLoopVarExpr(); + if (!ourEquivalence.expressionsAreEquivalent(assignmentLoopVarExpr, comparisonloopVarExpr)) return null; + PsiVariable comparisonExtremum = getVariable(comparison.getExtremumExpr()); + if (comparisonExtremum == null) return null; + if (!extremum.equals(comparisonExtremum)) return null; + if (mayChangeBeforeLoop(extremum, terminalBlock)) return null; + if (nonFinalVariables != null) { + if (containsAnyVariable(comparisonloopVarExpr, nonFinalVariables)) return null; + } + + PsiExpression extremumInitializer = extremum.getInitializer(); + if (!ExpressionUtils.isEvaluatedAtCompileTime(extremumInitializer)) return null; + return new PrimitiveExtremumTerminal(comparison.isMax(), terminalBlock, comparisonloopVarExpr, extremum, extremumInitializer); + } + } + + private static class SimpleRefExtremumTerminal implements ExtremumTerminal { + private final boolean myMax; + private final @NotNull TerminalBlock myTerminalBlock; + private final @NotNull PsiExpression myLoopVarExpression; + private final @NotNull PsiVariable myExtremum; + + private SimpleRefExtremumTerminal(boolean max, + @NotNull TerminalBlock block, + @NotNull PsiExpression loopVarExpression, + @NotNull PsiVariable extremum) { + myMax = max; + myTerminalBlock = block; + myLoopVarExpression = loopVarExpression; + myExtremum = extremum; + } + + @Nullable + @Override + public PsiElement replace() { + PsiType loopVarExpressionType = myLoopVarExpression.getType(); + if (loopVarExpressionType == null) return null; + String method = getComparingMethod(loopVarExpressionType); + if (method == null) return null; + String name = myTerminalBlock.getVariable().getName(); + if (name == null) return null; + String lambdaText = name + "->" + myLoopVarExpression.getText(); + String comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + method + "(" + lambdaText + ")"; + String stream = myTerminalBlock.generate() + "." + getOpertion(myMax) + "(" + comparator + ").orElse(null)"; + return replaceWithFindExtremum(myTerminalBlock.getMainLoop(), myExtremum, stream, null); + } + + @Override + public boolean isMax() { + return myMax; + } + + + @Nullable + private static SimpleRefExtremumTerminal extract(@NotNull PsiExpression nullCheckExpr, + @NotNull PsiExpression comparisionExpr, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock, + @Nullable List nonFinalVars) { + PsiBinaryExpression nullCheckBinary = tryCast(nullCheckExpr, PsiBinaryExpression.class); + if (nullCheckBinary == null) return null; + PsiVariable nullCheckingVar = ExpressionUtils.getVariableFromNullComparison(nullCheckBinary, true); + if (nullCheckingVar == null) return null; + Comparison comparison = Comparison.extract(comparisionExpr, terminalBlock.getVariable()); + if (comparison == null) return null; + if (statements.length != 1) return null; + PsiAssignmentExpression assignment = ExpressionUtils.getAssignment(statements[0]); + if (assignment == null) return null; + PsiVariable extremum = getVariable(assignment.getLExpression()); + PsiVariable loopVariable = getVariable(assignment.getRExpression()); + if (extremum == null || loopVariable == null) return null; + if (nullCheckingVar != extremum) return null; + if (!loopVariable.equals(terminalBlock.getVariable())) return null; + + PsiExpression extremumExpr = comparison.getExtremumExpr(); + PsiExpression loopVarExpr = comparison.getLoopVarExpr(); + String name = extremum.getName(); + if (name == null) return null; + if (!equalShape(extremumExpr, loopVarExpr, name, terminalBlock.getVariable())) return null; + if (mayChangeBeforeLoop(extremum, terminalBlock)) return null; + if (nonFinalVars != null) { + if (nonFinalVars.size() != 1) return null; + if (!nonFinalVars.get(0).equals(extremum)) return null; + if (containsAnyVariable(loopVarExpr, nonFinalVars)) return null; + } + + boolean max = comparison.isMax(); + + PsiExpression initializer = extremum.getInitializer(); + if (!ExpressionUtils.isNullLiteral(initializer)) return null; + return new SimpleRefExtremumTerminal(max, terminalBlock, loopVarExpr, extremum); + } + } + + private static class Comparison { + private final @NotNull PsiExpression myExtremumExpr; + private final @NotNull PsiExpression myLoopVarExpr; + private final boolean myIsMax; + + private Comparison(@NotNull PsiExpression extremumExpr, @NotNull PsiExpression loopVarExpr, boolean max) { + myExtremumExpr = extremumExpr; + myLoopVarExpr = loopVarExpr; + myIsMax = max; + } + + @NotNull + public PsiExpression getLoopVarExpr() { + return myLoopVarExpr; + } + + @NotNull + public PsiExpression getExtremumExpr() { + return myExtremumExpr; } public boolean isMax() { - return isMax; + return myIsMax; } - @NotNull - public KeySelector getKeySelector() { - return myKeySelector; - } - - @NotNull - public PsiVariable getLoopVariable() { - return myLoopVariable; - } - - @NotNull - public PsiVariable getExtremumHolder() { - return myExtremumHolder; - } @Nullable - public PsiExpression getKeySelectorInitializer() { - return myKeySelectorInitializer; - } - - @NotNull - public TerminalBlock getTerminalBlock() { - return myTerminalBlock; - } - - @Nullable - public PsiVariable getKeyExtremum() { - return myKeyExtremum; - } - } - - private static abstract class Assignment { - private final @NotNull PsiVariable myExtremumHolder; - private final @NotNull PsiVariable myLoopVariable; - - public Assignment(@NotNull PsiVariable extremumHolder, @NotNull PsiVariable loopVariable) { - myExtremumHolder = extremumHolder; - myLoopVariable = loopVariable; - } - - @NotNull - public PsiVariable getExtremumHolder() { - return myExtremumHolder; - } - - @NotNull - public PsiVariable getLoopVariable() { - return myLoopVariable; - } - } - - private static class SimpleAssignment extends Assignment { - private SimpleAssignment(@NotNull PsiVariable extremum, @NotNull PsiVariable loopVariable) { - super(extremum, loopVariable); - } - - @Nullable - static SimpleAssignment extractSimple(@NotNull PsiStatement[] statements) { - if (statements.length != 1) return null; - PsiStatement statement = statements[0]; - PsiExpressionStatement exprStatement = tryCast(statement, PsiExpressionStatement.class); - if (exprStatement == null) return null; - PsiAssignmentExpression assignment = tryCast(exprStatement.getExpression(), PsiAssignmentExpression.class); - PsiVariable extremumHolder = getVariable(assignment.getLExpression()); - if (extremumHolder == null) return null; - PsiExpression rExpression = assignment.getRExpression(); - if (rExpression == null) return null; - PsiVariable loopVar = getVariable(rExpression); - if (loopVar == null) return null; - return new SimpleAssignment(extremumHolder, loopVar); - } - } - - private static class ComplexAssignment extends Assignment { - private final @NotNull PsiVariable myExtremumKey; - private final @NotNull KeySelector myExtremumKeySelector; - - public ComplexAssignment(@NotNull PsiVariable extremum, - @NotNull PsiVariable loopVariable, - @NotNull PsiVariable extremumKey, - @NotNull KeySelector selector) { - super(extremum, loopVariable); - myExtremumKey = extremumKey; - myExtremumKeySelector = selector; - } - - @NotNull - public PsiVariable getExtremumKey() { - return myExtremumKey; - } - - @NotNull - public KeySelector getExtremumKeySelector() { - return myExtremumKeySelector; - } - - @Nullable - static ComplexAssignment extractComplex(@NotNull PsiStatement[] statements) { - if (statements.length != 2) return null; - PsiStatement first = statements[0]; - PsiStatement second = statements[1]; - ComplexAssignment firstWay = extractComplex(first, second); - if (firstWay != null) return firstWay; - return extractComplex(second, first); - } - - @Nullable - static ComplexAssignment extractComplex(@NotNull PsiStatement first, @NotNull PsiStatement second) { - PsiExpressionStatement firstExpr = tryCast(first, PsiExpressionStatement.class); - PsiExpressionStatement secondExpr = tryCast(second, PsiExpressionStatement.class); - if (firstExpr == null || secondExpr == null) return null; - PsiAssignmentExpression firstAssignment = tryCast(firstExpr.getExpression(), PsiAssignmentExpression.class); - PsiAssignmentExpression secondAssignment = tryCast(secondExpr.getExpression(), PsiAssignmentExpression.class); - if (firstAssignment == null || secondAssignment == null) return null; - ComplexAssignment firstWay = extractComplex(firstAssignment, secondAssignment); - if (firstWay != null) return firstWay; - return extractComplex(secondAssignment, firstAssignment); - } - - @Nullable - static ComplexAssignment extractComplex(@NotNull PsiAssignmentExpression first, @NotNull PsiAssignmentExpression second) { - PsiExpression firstRExpression = first.getRExpression(); - PsiExpression secondRExpression = second.getRExpression(); - if (firstRExpression == null || secondRExpression == null) return null; - PsiVariable extremum = getVariable(first.getLExpression()); - if (extremum == null) return null; - PsiVariable loopVar = getVariable(firstRExpression); - if (loopVar == null) return null; - PsiVariable extremumKeyHolder = getVariable(second.getLExpression()); - if (extremumKeyHolder == null) return null; - KeySelector loopVarKeySelector = KeySelector.extractSelector(secondRExpression); - if (loopVarKeySelector == null) return null; - return new ComplexAssignment(extremum, loopVar, extremumKeyHolder, loopVarKeySelector); - } - } - - private static class Comparision { - private final @NotNull KeySelector myFirstSelector; - private final @NotNull KeySelector mySecondSelector; - private final boolean myIsGreater; - - private Comparision(@NotNull KeySelector firstSelector, @NotNull KeySelector secondSelector, boolean greater) { - myFirstSelector = firstSelector; - mySecondSelector = secondSelector; - myIsGreater = greater; - } - - @NotNull - public KeySelector getFirstSelector() { - return myFirstSelector; - } - - @NotNull - public KeySelector getSecondSelector() { - return mySecondSelector; - } - - public boolean isGreater() { - return myIsGreater; - } - - public KeySelector getExtremumHolderSelector(boolean isMax) { - if (myIsGreater) { - return !isMax ? myFirstSelector : mySecondSelector; - } - else { - return isMax ? myFirstSelector : mySecondSelector; - } - } - - public KeySelector getLoopVariableKeySelector(boolean isMax) { - if (myIsGreater) { - return isMax ? myFirstSelector : mySecondSelector; - } - else { - return !isMax ? myFirstSelector : mySecondSelector; - } - } - - @Nullable - static Comparision extract(@NotNull PsiExpression expression) { + static Comparison extract(@NotNull PsiExpression expression, @NotNull PsiVariable loopVariable) { PsiBinaryExpression binaryExpression = tryCast(expression, PsiBinaryExpression.class); IElementType sign = binaryExpression.getOperationSign().getTokenType(); PsiExpression rOperand = binaryExpression.getROperand(); if (rOperand == null) return null; PsiExpression lOperand = binaryExpression.getLOperand(); if (sign.equals(JavaTokenType.LT) || sign.equals(JavaTokenType.LE)) { - return extract(lOperand, rOperand, false); + return extract(lOperand, rOperand, loopVariable, false); } else if (sign.equals(JavaTokenType.GT) || sign.equals(JavaTokenType.GE)) { - return extract(lOperand, rOperand, true); + return extract(lOperand, rOperand, loopVariable, true); } return null; } @Nullable - private static Comparision extract(@NotNull PsiExpression first, @NotNull PsiExpression second, boolean isGreater) { - KeySelector firstSelector = KeySelector.extractSelector(first); - KeySelector secondSelector = KeySelector.extractSelector(second); - if (firstSelector == null || secondSelector == null) return null; - return new Comparision(firstSelector, secondSelector, isGreater); + private static Comparison extract(@NotNull PsiExpression lOperand, + @NotNull PsiExpression rOperand, + @NotNull PsiVariable loopVariable, + boolean isGreater) { + final boolean max; + final PsiExpression extremumExpr; + final PsiExpression loopVarExpr; + if (ReferencesSearch.search(loopVariable, new LocalSearchScope(lOperand)).findFirst() != null) { + max = isGreater; + loopVarExpr = lOperand; + extremumExpr = rOperand; + } + else if (ReferencesSearch.search(loopVariable, new LocalSearchScope(rOperand)).findFirst() != null) { + max = !isGreater; + loopVarExpr = rOperand; + extremumExpr = lOperand; + } + else { + return null; + } + return new Comparison(extremumExpr, loopVarExpr, max); } } } \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java index a819e5c3a82a..329d76715599 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java @@ -52,8 +52,6 @@ import java.util.Collection; import java.util.List; import java.util.Objects; -import static com.intellij.codeInspection.streamMigration.FindExtremumMigration.MAX_REPLACEMENT; -import static com.intellij.codeInspection.streamMigration.FindExtremumMigration.MIN_REPLACEMENT; import static com.intellij.codeInspection.streamMigration.OperationReductionMigration.SUM_OPERATION; import static com.intellij.util.ObjectUtils.tryCast; import static com.siyeh.ig.psiutils.ControlFlowUtils.InitializerUsageStatus.UNKNOWN; @@ -495,9 +493,9 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo if (getAccumulatedVariable(tb, nonFinalVariables, SUM_OPERATION) != null) { return new SumMigration(true); } - FindExtremumMigration.ExtremumTerminal extremumTerminal = FindExtremumMigration.extract(tb); - if(extremumTerminal != null && extremumTerminal.getNonFinalVariableCount() == nonFinalVariables.size()) { - return new FindExtremumMigration(true, extremumTerminal.isMax()? MAX_REPLACEMENT : MIN_REPLACEMENT); + FindExtremumMigration.ExtremumTerminal extremumTerminal = FindExtremumMigration.extract(tb, nonFinalVariables); + if(extremumTerminal != null) { + return new FindExtremumMigration(true, FindExtremumMigration.getOpertion(extremumTerminal.isMax()) + "()"); } for (OperationReductionMigration.ReductionOperation reductionOperation : OperationReductionMigration.OPERATIONS) { if (getAccumulatedVariable(tb, nonFinalVariables, reductionOperation) != null) { diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/TerminalBlock.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/TerminalBlock.java index a19daff331bf..b374178faaae 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/TerminalBlock.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/TerminalBlock.java @@ -377,10 +377,10 @@ class TerminalBlock { @Nullable TerminalBlock withoutLastOperation() { - if(myOperations.length == 0) return null; + if(myOperations.length == 1) return null; Operation[] operations = new Operation[myOperations.length - 1]; System.arraycopy(myOperations, 0, operations, 0, operations.length); - return new TerminalBlock(operations, myVariable, myStatements); + return new TerminalBlock(operations, operations[operations.length - 1].getVariable(), myStatements); } @Nullable diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveNonTrivialSelector.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveNonTrivialSelector.java new file mode 100644 index 000000000000..d1ee2cdebb20 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveNonTrivialSelector.java @@ -0,0 +1,9 @@ +// "Replace with min()" "true" + +import java.util.Arrays; + +public class Main { + public void work(int[] ints) { + int min = Arrays.stream(ints).filter(anInt -> anInt < 10).map(anInt -> anInt + anInt * 2 - 10).filter(anInt -> anInt <= 0).min().orElse(0); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveNonTrivialSelector.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveNonTrivialSelector.java new file mode 100644 index 000000000000..925de4b9cdcb --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveNonTrivialSelector.java @@ -0,0 +1,14 @@ +// "Replace with min()" "true" + +public class Main { + public void work(int[] ints) { + int min = 0; + for ( int anInt :ints){ + if (anInt < 10) { + if (min > anInt + anInt * 2 - 10) { + min = anInt + anInt * 2 - 10; + } + } + } + } +} \ No newline at end of file From 8f351e5003660733500b98a10500f97b72fd020b Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Fri, 28 Jul 2017 13:30:52 +0700 Subject: [PATCH 15/28] add tests, ensure type is known to be comparable : IDEA-CR-23237 --- .../FindExtremumMigration.java | 57 +++++++++++++++---- .../minMax/afterMaxReference5.java | 34 ----------- .../afterMinInitialValueWithoutFilter.java | 9 +++ .../minMax/afterMinPrimitiveMap.java | 9 +++ ...rMinReferenceInitializerNotJustBefore.java | 2 +- .../minMax/beforeMaxReference3.java | 6 +- .../minMax/beforeMaxReference4.java | 2 +- .../minMax/beforeMaxReference5.java | 41 ------------- .../beforeMinInitialValueWithoutFilter.java | 16 ++++++ .../minMax/beforeMinPrimitiveMap.java | 16 ++++++ ...eMinReferenceInitializerNotJustBefore.java | 2 +- 11 files changed, 99 insertions(+), 95 deletions(-) delete mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference5.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinInitialValueWithoutFilter.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveMap.java delete mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference5.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinInitialValueWithoutFilter.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveMap.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 882e0b51b1a9..1734a909aca6 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -63,6 +63,21 @@ public class FindExtremumMigration extends BaseStreamApiMigration { return null; } + static private boolean hasKnownComparableType(@NotNull PsiType type) { + return type.equals(PsiType.INT) || type.equals(PsiType.LONG) || type.equals(PsiType.DOUBLE); + } + + @Nullable + static private Object getNonFilterableInitialValue(@NotNull PsiType type, boolean isMax) { + if (type.equals(PsiType.INT)) { + return isMax ? Integer.MIN_VALUE : Integer.MAX_VALUE; + } + else if (type.equals(PsiType.LONG)) { + return isMax ? Long.MIN_VALUE : Long.MAX_VALUE; + } + return null; + } + @Nullable static ExtremumTerminal extract(@NotNull TerminalBlock terminalBlock, @Nullable List nonFinalVariables) { PsiStatement[] statements = terminalBlock.getStatements(); @@ -323,6 +338,8 @@ public class FindExtremumMigration extends BaseStreamApiMigration { if (nonFinalVariables != null) { if (containsAnyVariable(assignment.getLoopVarExpression(), nonFinalVariables)) return null; } + PsiType loopVarExprType = loopVarExpr.getType(); + if (loopVarExprType == null || !hasKnownComparableType(loopVarExprType)) return null; PsiExpression extremumInitializer = extremum.getInitializer(); PsiExpression extremumKeyInitializer = extremumKey.getInitializer(); @@ -429,15 +446,27 @@ public class FindExtremumMigration extends BaseStreamApiMigration { PsiLoopStatement loop = blockWithMap.getMainLoop(); PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(loop.getProject()); String extremumInitializer = myExtremumInitializer.getText(); - // TODO not creating filter when Integer.MIN... - String name = myTerminalBlock.getVariable().getName(); - if (name == null) return null; - PsiExpression condition = - elementFactory.createExpressionFromText(name + inFilterOperation + extremumInitializer, loop); - TerminalBlock blockWithFilter = - blockWithMap.add(new StreamApiMigrationInspection.FilterOp(condition, myTerminalBlock.getVariable(), false)); - String stream = blockWithFilter.generate() + "." + getOpertion(myMax) + "().orElse(" + extremumInitializer + ")"; + PsiType type = myExtremumInitializer.getType(); + if (type == null) return null; + Object initializerValue = ExpressionUtils.computeConstantExpression(myExtremumInitializer); + if (initializerValue == null) return null; + + Object nonFilterableInitialValue = getNonFilterableInitialValue(type, myMax); + final TerminalBlock terminalBlock; + if (nonFilterableInitialValue != null && !nonFilterableInitialValue.equals(initializerValue)) { + String name = myTerminalBlock.getVariable().getName(); + if (name == null) return null; + PsiExpression condition = + elementFactory.createExpressionFromText(name + inFilterOperation + extremumInitializer, loop); + + terminalBlock = blockWithMap.add(new StreamApiMigrationInspection.FilterOp(condition, myTerminalBlock.getVariable(), false)); + } else { + terminalBlock = blockWithMap; + } + + + String stream = terminalBlock.generate() + "." + getOpertion(myMax) + "().orElse(" + extremumInitializer + ")"; return replaceWithFindExtremum(loop, myExtremum, stream, null); } @@ -461,19 +490,21 @@ public class FindExtremumMigration extends BaseStreamApiMigration { PsiVariable extremum = getVariable(assignment.getLExpression()); if (extremum == null) return null; PsiExpression assignmentLoopVarExpr = assignment.getRExpression(); - PsiExpression comparisonloopVarExpr = comparison.getLoopVarExpr(); - if (!ourEquivalence.expressionsAreEquivalent(assignmentLoopVarExpr, comparisonloopVarExpr)) return null; + PsiExpression comparisonLoopVarExpr = comparison.getLoopVarExpr(); + if (!ourEquivalence.expressionsAreEquivalent(assignmentLoopVarExpr, comparisonLoopVarExpr)) return null; PsiVariable comparisonExtremum = getVariable(comparison.getExtremumExpr()); if (comparisonExtremum == null) return null; if (!extremum.equals(comparisonExtremum)) return null; if (mayChangeBeforeLoop(extremum, terminalBlock)) return null; if (nonFinalVariables != null) { - if (containsAnyVariable(comparisonloopVarExpr, nonFinalVariables)) return null; + if (containsAnyVariable(comparisonLoopVarExpr, nonFinalVariables)) return null; } + PsiType loopVarExprType = comparisonLoopVarExpr.getType(); + if (loopVarExprType == null || !hasKnownComparableType(loopVarExprType)) return null; PsiExpression extremumInitializer = extremum.getInitializer(); if (!ExpressionUtils.isEvaluatedAtCompileTime(extremumInitializer)) return null; - return new PrimitiveExtremumTerminal(comparison.isMax(), terminalBlock, comparisonloopVarExpr, extremum, extremumInitializer); + return new PrimitiveExtremumTerminal(comparison.isMax(), terminalBlock, comparisonLoopVarExpr, extremum, extremumInitializer); } } @@ -546,6 +577,8 @@ public class FindExtremumMigration extends BaseStreamApiMigration { if (!nonFinalVars.get(0).equals(extremum)) return null; if (containsAnyVariable(loopVarExpr, nonFinalVars)) return null; } + PsiType loopVarExprType = loopVarExpr.getType(); + if (loopVarExprType == null || !hasKnownComparableType(loopVarExprType)) return null; boolean max = comparison.isMax(); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference5.java deleted file mode 100644 index 35e4495bf19f..000000000000 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference5.java +++ /dev/null @@ -1,34 +0,0 @@ -// "Replace with max()" "true" - -import java.util.*; - -public class Main { - static class Person { - String name; - int age; - - public String getName() { - return name; - } - - public int getAge() { - return age; - } - - public Person(String name, int age) { - this.name = name; - this.age = age; - } - } - - public Person max() { - List personList = Arrays.asList( - new Person("Roman", 21), - new Person("James", 25), - new Person("Kelly", 12) - ); - Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); - - return maxPerson; - } -} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinInitialValueWithoutFilter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinInitialValueWithoutFilter.java new file mode 100644 index 000000000000..ddfff0416b55 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinInitialValueWithoutFilter.java @@ -0,0 +1,9 @@ +// "Replace with max()" "true" + +import java.util.*; + +class Main { + public void work(long[] ints) { + long max = Arrays.stream(ints).filter(anInt -> anInt < 10).max().orElse(Long.MIN_VALUE); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveMap.java new file mode 100644 index 000000000000..8277d1570d3d --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveMap.java @@ -0,0 +1,9 @@ +// "Replace with min()" "true" + +import java.util.*; + +public class Main { + public void work(int[] ints) { + int min = Arrays.stream(ints).filter(anInt -> anInt < 10).map(anInt -> anInt + 2343).filter(anInt -> anInt <= 0).min().orElse(0); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReferenceInitializerNotJustBefore.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReferenceInitializerNotJustBefore.java index 36d620cc7b0d..605b41d220b9 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReferenceInitializerNotJustBefore.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReferenceInitializerNotJustBefore.java @@ -2,7 +2,7 @@ import java.util.*; -public class Main { +class Main { static class Person { String name; int age; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference3.java index 35a281408f48..5bdcc6abb1c7 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference3.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference3.java @@ -30,11 +30,7 @@ public class Main { Person maxPerson = null; for (Person p : personList) { if(p.getAge() > 13) { - if (maxPerson == null) { - maxPerson = p; - continue; - } - if (maxPerson.getAge() < p.getAge()) { + if (maxPerson == null || p.getAge() > maxPerson.getAge()) { maxPerson = p; } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference4.java index 5bdcc6abb1c7..e55ef0f62c56 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference4.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference4.java @@ -30,7 +30,7 @@ public class Main { Person maxPerson = null; for (Person p : personList) { if(p.getAge() > 13) { - if (maxPerson == null || p.getAge() > maxPerson.getAge()) { + if (p.getAge() > maxPerson.getAge() || maxPerson == null) { maxPerson = p; } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference5.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference5.java deleted file mode 100644 index e55ef0f62c56..000000000000 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference5.java +++ /dev/null @@ -1,41 +0,0 @@ -// "Replace with max()" "true" - -import java.util.*; - -public class Main { - static class Person { - String name; - int age; - - public String getName() { - return name; - } - - public int getAge() { - return age; - } - - public Person(String name, int age) { - this.name = name; - this.age = age; - } - } - - public Person max() { - List personList = Arrays.asList( - new Person("Roman", 21), - new Person("James", 25), - new Person("Kelly", 12) - ); - Person maxPerson = null; - for (Person p : personList) { - if(p.getAge() > 13) { - if (p.getAge() > maxPerson.getAge() || maxPerson == null) { - maxPerson = p; - } - } - } - - return maxPerson; - } -} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinInitialValueWithoutFilter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinInitialValueWithoutFilter.java new file mode 100644 index 000000000000..0176f7821dfe --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinInitialValueWithoutFilter.java @@ -0,0 +1,16 @@ +// "Replace with max()" "true" + +import java.util.*; + +class Main { + public void work(long[] ints) { + long max = Long.MIN_VALUE; + for (long anInt : ints) { + if(anInt < 10) { + if(max < anInt) { + max = anInt; + } + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveMap.java new file mode 100644 index 000000000000..2bea80e7c9a8 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveMap.java @@ -0,0 +1,16 @@ +// "Replace with min()" "true" + +import java.util.*; + +public class Main { + public void work(int[] ints) { + int min = 0; + for (int anInt : ints) { + if(anInt < 10) { + if(min > anInt + 2343) { + min = anInt + 2343; + } + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReferenceInitializerNotJustBefore.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReferenceInitializerNotJustBefore.java index b35aaacc05cb..33af9219a9be 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReferenceInitializerNotJustBefore.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReferenceInitializerNotJustBefore.java @@ -2,7 +2,7 @@ import java.util.*; -public class Main { +class Main { static class Person { String name; int age; From 33f688b5bf256ddf88059d7a47eafe2eaadef430 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Fri, 28 Jul 2017 14:18:10 +0700 Subject: [PATCH 16/28] add support for negated filter operation : IDEA-CR-23237 --- .../FindExtremumMigration.java | 71 +++++++++++-------- .../minMax/afterMaxPrimitiveNegated.java | 9 +++ .../minMax/afterMaxReferenceTmpParens.java | 34 +++++++++ .../minMax/beforeMaxPrimitiveNegated.java | 13 ++++ .../minMax/beforeMaxReferenceTmpParens.java | 43 +++++++++++ 5 files changed, 141 insertions(+), 29 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitiveNegated.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmpParens.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNegated.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceTmpParens.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 1734a909aca6..aa92f291ff34 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -30,6 +30,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; +import static com.intellij.psi.util.PsiUtil.skipParenthesizedExprDown; import static com.intellij.util.ObjectUtils.tryCast; public class FindExtremumMigration extends BaseStreamApiMigration { @@ -81,17 +82,17 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @Nullable static ExtremumTerminal extract(@NotNull TerminalBlock terminalBlock, @Nullable List nonFinalVariables) { PsiStatement[] statements = terminalBlock.getStatements(); - StreamApiMigrationInspection.Operation operation = terminalBlock.getLastOperation(); - StreamApiMigrationInspection.FilterOp filterOp = tryCast(operation, StreamApiMigrationInspection.FilterOp.class); + StreamApiMigrationInspection.FilterOp filterOp = terminalBlock.getLastOperation(StreamApiMigrationInspection.FilterOp.class); if (filterOp != null) { TerminalBlock block = terminalBlock.withoutLastOperation(); if (block != null) { + boolean negated = filterOp.isNegated(); PsiExpression condition = filterOp.getExpression(); - ExtremumTerminal simpleRefCase = extractSimpleRefCase(condition, statements, block, nonFinalVariables); + ExtremumTerminal simpleRefCase = extractSimpleRefCase(condition, statements, block, nonFinalVariables, negated); if (simpleRefCase != null) return simpleRefCase; - ExtremumTerminal primitiveCase = PrimitiveExtremumTerminal.extract(condition, statements, block, nonFinalVariables); + ExtremumTerminal primitiveCase = PrimitiveExtremumTerminal.extract(condition, statements, block, nonFinalVariables, negated); if (primitiveCase != null) return primitiveCase; - ExtremumTerminal complexRefCase = extractComplexRefCase(condition, statements, block, nonFinalVariables); + ExtremumTerminal complexRefCase = extractComplexRefCase(condition, statements, block, nonFinalVariables, negated); if (complexRefCase != null) return complexRefCase; } } @@ -130,7 +131,8 @@ public class FindExtremumMigration extends BaseStreamApiMigration { PsiExpression elseIfCondition = elseIfStatement.getCondition(); PsiStatement elseIf = unwrapIfBranchToStatement(elseIfStatement.getThenBranch()); if (elseIf == null || elseIfCondition == null) return null; - ExtremumTerminal firstWay = extractIfElseCase(thenBranch, thenCondition, elseIf, elseIfCondition, terminalBlock, nonNullVariables); + ExtremumTerminal firstWay = + extractIfElseCase(thenBranch, thenCondition, elseIf, elseIfCondition, terminalBlock, nonNullVariables); if (firstWay != null) return firstWay; return extractIfElseCase(elseIf, elseIfCondition, thenBranch, thenCondition, terminalBlock, nonNullVariables); } @@ -144,7 +146,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @Nullable List nonNullVariables) { if (!ourEquivalence.statementsAreEquivalent(nullCheckBranch, comparisionBranch)) return null; return SimpleRefExtremumTerminal - .extract(nullCheckExpr, comparisionExpr, new PsiStatement[]{comparisionBranch}, terminalBlock, nonNullVariables); + .extract(nullCheckExpr, comparisionExpr, new PsiStatement[]{comparisionBranch}, terminalBlock, nonNullVariables, false); } @Nullable @@ -167,17 +169,20 @@ public class FindExtremumMigration extends BaseStreamApiMigration { static private ExtremumTerminal extractComplexRefCase(@NotNull PsiExpression condition, @NotNull PsiStatement[] statements, @NotNull TerminalBlock terminalBlock, - @Nullable List nonFinalVariables) { - return extractRefCase(condition, statements, terminalBlock, FindExtremumMigration.ComplexExtremumTerminal::extract, nonFinalVariables); + @Nullable List nonFinalVariables, + boolean isNegated) { + return extractRefCase(condition, statements, terminalBlock, FindExtremumMigration.ComplexExtremumTerminal::extract, nonFinalVariables, + isNegated); } @Nullable static private ExtremumTerminal extractSimpleRefCase(@NotNull PsiExpression condition, @NotNull PsiStatement[] statements, @NotNull TerminalBlock terminalBlock, - @Nullable List nonFinalVariables) { + @Nullable List nonFinalVariables, + boolean isNegated) { return extractRefCase(condition, statements, terminalBlock, FindExtremumMigration.SimpleRefExtremumTerminal::extract, - nonFinalVariables); + nonFinalVariables, isNegated); } @Nullable @@ -185,16 +190,17 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @NotNull PsiStatement[] statements, @NotNull TerminalBlock terminalBlock, @NotNull Extractor extractor, - @Nullable List nonFinalVariables) { + @Nullable List nonFinalVariables, + boolean isNegated) { PsiBinaryExpression binaryExpression = tryCast(condition, PsiBinaryExpression.class); if (binaryExpression == null) return null; - IElementType sign = binaryExpression.getOperationSign().getTokenType(); + IElementType sign = binaryExpression.getOperationTokenType(); PsiExpression lOperand = binaryExpression.getLOperand(); PsiExpression rOperand = binaryExpression.getROperand(); if (!sign.equals(JavaTokenType.OROR) || rOperand == null) return null; - ExtremumTerminal firstWay = extractor.extractOriented(lOperand, rOperand, statements, terminalBlock, nonFinalVariables); + ExtremumTerminal firstWay = extractor.extractOriented(lOperand, rOperand, statements, terminalBlock, nonFinalVariables, isNegated); if (firstWay != null) return firstWay; - return extractor.extractOriented(rOperand, lOperand, statements, terminalBlock, nonFinalVariables); + return extractor.extractOriented(rOperand, lOperand, statements, terminalBlock, nonFinalVariables, isNegated); } @@ -214,7 +220,8 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @Nullable static PsiVariable getVariable(@Nullable PsiExpression expression) { - PsiReferenceExpression referenceExpression = tryCast(expression, PsiReferenceExpression.class); + PsiExpression nakedExpression = skipParenthesizedExprDown(expression); + PsiReferenceExpression referenceExpression = tryCast(nakedExpression, PsiReferenceExpression.class); if (referenceExpression == null) return null; return tryCast(referenceExpression.resolve(), PsiVariable.class); } @@ -244,7 +251,8 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @NotNull PsiExpression comparisionExpr, @NotNull PsiStatement[] statements, @NotNull TerminalBlock terminalBlock, - @Nullable List nonFinalVars); + @Nullable List nonFinalVars, + boolean isNegated); } //Person maxPerson = null; @@ -312,11 +320,12 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @NotNull PsiExpression comparisonExpr, @NotNull PsiStatement[] statements, @NotNull TerminalBlock terminalBlock, - @Nullable List nonFinalVariables) { - Comparison comparison = Comparison.extract(comparisonExpr, terminalBlock.getVariable()); + @Nullable List nonFinalVariables, + boolean isNegated) { + Comparison comparison = Comparison.extract(comparisonExpr, terminalBlock.getVariable(), isNegated); if (comparison == null) return null; - PsiBinaryExpression nullCheckBinary = tryCast(nullCheckExpr, PsiBinaryExpression.class); + PsiBinaryExpression nullCheckBinary = tryCast(skipParenthesizedExprDown(nullCheckExpr), PsiBinaryExpression.class); if (nullCheckBinary == null) return null; PsiVariable extremumNullChecked = ExpressionUtils.getVariableFromNullComparison(nullCheckBinary, true); @@ -461,7 +470,8 @@ public class FindExtremumMigration extends BaseStreamApiMigration { elementFactory.createExpressionFromText(name + inFilterOperation + extremumInitializer, loop); terminalBlock = blockWithMap.add(new StreamApiMigrationInspection.FilterOp(condition, myTerminalBlock.getVariable(), false)); - } else { + } + else { terminalBlock = blockWithMap; } @@ -481,8 +491,9 @@ public class FindExtremumMigration extends BaseStreamApiMigration { private static PrimitiveExtremumTerminal extract(@NotNull PsiExpression condition, @NotNull PsiStatement[] statements, @NotNull TerminalBlock terminalBlock, - @Nullable List nonFinalVariables) { - Comparison comparison = Comparison.extract(condition, terminalBlock.getVariable()); + @Nullable List nonFinalVariables, + boolean isNegated) { + Comparison comparison = Comparison.extract(condition, terminalBlock.getVariable(), isNegated); if (comparison == null) return null; if (statements.length != 1) return null; PsiAssignmentExpression assignment = ExpressionUtils.getAssignment(statements[0]); @@ -550,12 +561,13 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @NotNull PsiExpression comparisionExpr, @NotNull PsiStatement[] statements, @NotNull TerminalBlock terminalBlock, - @Nullable List nonFinalVars) { + @Nullable List nonFinalVars, + boolean isNegated) { PsiBinaryExpression nullCheckBinary = tryCast(nullCheckExpr, PsiBinaryExpression.class); if (nullCheckBinary == null) return null; PsiVariable nullCheckingVar = ExpressionUtils.getVariableFromNullComparison(nullCheckBinary, true); if (nullCheckingVar == null) return null; - Comparison comparison = Comparison.extract(comparisionExpr, terminalBlock.getVariable()); + Comparison comparison = Comparison.extract(comparisionExpr, terminalBlock.getVariable(), isNegated); if (comparison == null) return null; if (statements.length != 1) return null; PsiAssignmentExpression assignment = ExpressionUtils.getAssignment(statements[0]); @@ -615,17 +627,18 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @Nullable - static Comparison extract(@NotNull PsiExpression expression, @NotNull PsiVariable loopVariable) { - PsiBinaryExpression binaryExpression = tryCast(expression, PsiBinaryExpression.class); + static Comparison extract(@NotNull PsiExpression expression, @NotNull PsiVariable loopVariable, boolean isNegated) { + PsiBinaryExpression binaryExpression = tryCast(skipParenthesizedExprDown(expression), PsiBinaryExpression.class); + if (binaryExpression == null) return null; IElementType sign = binaryExpression.getOperationSign().getTokenType(); PsiExpression rOperand = binaryExpression.getROperand(); if (rOperand == null) return null; PsiExpression lOperand = binaryExpression.getLOperand(); if (sign.equals(JavaTokenType.LT) || sign.equals(JavaTokenType.LE)) { - return extract(lOperand, rOperand, loopVariable, false); + return extract(lOperand, rOperand, loopVariable, isNegated); } else if (sign.equals(JavaTokenType.GT) || sign.equals(JavaTokenType.GE)) { - return extract(lOperand, rOperand, loopVariable, true); + return extract(lOperand, rOperand, loopVariable, !isNegated); } return null; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitiveNegated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitiveNegated.java new file mode 100644 index 000000000000..7e0a64b37ed1 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitiveNegated.java @@ -0,0 +1,9 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + public void work(int[] ints) { + int max = Arrays.stream(ints).max().orElse(Integer.MIN_VALUE); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmpParens.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmpParens.java new file mode 100644 index 000000000000..4d0ea8ccf7fe --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmpParens.java @@ -0,0 +1,34 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).filter(p -> p.getAge() >= 0).max(Comparator.comparingInt(Person::getAge)).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNegated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNegated.java new file mode 100644 index 000000000000..192c87e99ed3 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNegated.java @@ -0,0 +1,13 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + public void work(int[] ints) { + int max = Integer.MIN_VALUE; + for (int i : ints) { + if(i < max) continue; + max = i; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceTmpParens.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceTmpParens.java new file mode 100644 index 000000000000..eab765fb2d77 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceTmpParens.java @@ -0,0 +1,43 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + int maxAge = 0; + for (Person p : personList) { + if(p.getAge() > 13) { + if (((maxPerson) == null) || ((maxAge < p.getAge()))) { + maxAge = (p.getAge()); + maxPerson = (p); + } + } + } + + return maxPerson; + } +} \ No newline at end of file From 751ddbb546fdb4f2ae07b918482afb7f3aa19e32 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Fri, 28 Jul 2017 16:49:45 +0700 Subject: [PATCH 17/28] fix notes from review : IDEA-CR-23237 --- .../FindExtremumMigration.java | 126 ++++++++---------- .../StreamApiMigrationInspection.java | 2 +- .../minMax/afterMaxReference4.java | 34 ----- .../minMax/beforeMaxReference4.java | 2 +- .../minMax/beforeMaxReferenceField.java | 2 +- .../siyeh/ig/psiutils/ExpressionUtils.java | 1 + 6 files changed, 56 insertions(+), 111 deletions(-) delete mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference4.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index aa92f291ff34..42628e234825 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -24,6 +24,7 @@ import com.intellij.psi.tree.IElementType; import com.siyeh.ig.psiutils.ControlFlowUtils; import com.siyeh.ig.psiutils.EquivalenceChecker; import com.siyeh.ig.psiutils.ExpressionUtils; +import com.siyeh.ig.psiutils.VariableAccessUtils; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -33,7 +34,7 @@ import java.util.List; import static com.intellij.psi.util.PsiUtil.skipParenthesizedExprDown; import static com.intellij.util.ObjectUtils.tryCast; -public class FindExtremumMigration extends BaseStreamApiMigration { +class FindExtremumMigration extends BaseStreamApiMigration { private static final String MAX_OP = "max"; private static final String MIN_OP = "min"; @@ -52,7 +53,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @Contract(pure = true) @NotNull - static String getOpertion(boolean isMax) { + static String getOperation(boolean isMax) { return isMax ? MAX_OP : MIN_OP; } @@ -79,6 +80,10 @@ public class FindExtremumMigration extends BaseStreamApiMigration { return null; } + /** + * @param nonFinalVariables list of non final variables used in terminal block. If null checks are omitted (intended to be null when + * quick fix applied), empty array means that no non final variables are present in block and have different semantics + */ @Nullable static ExtremumTerminal extract(@NotNull TerminalBlock terminalBlock, @Nullable List nonFinalVariables) { PsiStatement[] statements = terminalBlock.getStatements(); @@ -88,11 +93,13 @@ public class FindExtremumMigration extends BaseStreamApiMigration { if (block != null) { boolean negated = filterOp.isNegated(); PsiExpression condition = filterOp.getExpression(); - ExtremumTerminal simpleRefCase = extractSimpleRefCase(condition, statements, block, nonFinalVariables, negated); + ExtremumTerminal simpleRefCase = extractRefCase(condition, statements, block, SimpleRefExtremumTerminal::extract, + nonFinalVariables, negated); if (simpleRefCase != null) return simpleRefCase; ExtremumTerminal primitiveCase = PrimitiveExtremumTerminal.extract(condition, statements, block, nonFinalVariables, negated); if (primitiveCase != null) return primitiveCase; - ExtremumTerminal complexRefCase = extractComplexRefCase(condition, statements, block, nonFinalVariables, negated); + ExtremumTerminal complexRefCase = extractRefCase(condition, statements, block, ComplexExtremumTerminal::extract, nonFinalVariables, + negated); if (complexRefCase != null) return complexRefCase; } } @@ -107,17 +114,17 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @Nullable static private ExtremumTerminal extractIfElseCase(@NotNull PsiStatement[] statements, @NotNull TerminalBlock terminalBlock, - @Nullable List nonNullVariables) { + @Nullable List nonFinalVariables) { if (statements.length != 1) return null; PsiStatement statement = statements[0]; PsiIfStatement ifStatement = tryCast(statement, PsiIfStatement.class); if (ifStatement == null) return null; PsiExpression thenCondition = ifStatement.getCondition(); if (thenCondition == null) return null; - PsiStatement thenBranch = unwrapIfBranchToStatement(ifStatement.getThenBranch()); - PsiStatement elseBranch = unwrapIfBranchToStatement(ifStatement.getElseBranch()); + PsiStatement thenBranch = ControlFlowUtils.stripBraces(ifStatement.getThenBranch()); + PsiStatement elseBranch = ControlFlowUtils.stripBraces(ifStatement.getElseBranch()); if (thenBranch == null || elseBranch == null) return null; - return extractIfElseCase(thenBranch, thenCondition, elseBranch, terminalBlock, nonNullVariables); + return extractIfElseCase(thenBranch, thenCondition, elseBranch, terminalBlock, nonFinalVariables); } @Nullable @@ -125,64 +132,28 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @NotNull PsiExpression thenCondition, @NotNull PsiStatement elseBranch, @NotNull TerminalBlock terminalBlock, - @Nullable List nonNullVariables) { + @Nullable List nonFinalVariables) { PsiIfStatement elseIfStatement = tryCast(elseBranch, PsiIfStatement.class); if (elseIfStatement == null || elseIfStatement.getElseBranch() != null) return null; PsiExpression elseIfCondition = elseIfStatement.getCondition(); - PsiStatement elseIf = unwrapIfBranchToStatement(elseIfStatement.getThenBranch()); + PsiStatement elseIf = ControlFlowUtils.stripBraces(elseIfStatement.getThenBranch()); if (elseIf == null || elseIfCondition == null) return null; ExtremumTerminal firstWay = - extractIfElseCase(thenBranch, thenCondition, elseIf, elseIfCondition, terminalBlock, nonNullVariables); + extractIfElseCase(thenBranch, thenCondition, elseIf, elseIfCondition, terminalBlock, nonFinalVariables); if (firstWay != null) return firstWay; - return extractIfElseCase(elseIf, elseIfCondition, thenBranch, thenCondition, terminalBlock, nonNullVariables); + return extractIfElseCase(elseIf, elseIfCondition, thenBranch, thenCondition, terminalBlock, nonFinalVariables); } @Nullable static private ExtremumTerminal extractIfElseCase(@NotNull PsiStatement nullCheckBranch, @NotNull PsiExpression nullCheckExpr, - @NotNull PsiStatement comparisionBranch, - @NotNull PsiExpression comparisionExpr, + @NotNull PsiStatement comparisonBranch, + @NotNull PsiExpression comparisonExpr, @NotNull TerminalBlock terminalBlock, - @Nullable List nonNullVariables) { - if (!ourEquivalence.statementsAreEquivalent(nullCheckBranch, comparisionBranch)) return null; + @Nullable List nonFinalVariables) { + if (!ourEquivalence.statementsAreEquivalent(nullCheckBranch, comparisonBranch)) return null; return SimpleRefExtremumTerminal - .extract(nullCheckExpr, comparisionExpr, new PsiStatement[]{comparisionBranch}, terminalBlock, nonNullVariables, false); - } - - @Nullable - static private PsiStatement unwrapIfBranchToStatement(@Nullable PsiStatement statement) { - PsiStatement[] statements = unwrapIfBranch(statement); - if (statements.length != 1) return null; - return statements[0]; - } - - @NotNull - static private PsiStatement[] unwrapIfBranch(@Nullable PsiStatement statement) { - PsiBlockStatement blockStatement = tryCast(statement, PsiBlockStatement.class); - if (blockStatement != null) { - return blockStatement.getCodeBlock().getStatements(); - } - return new PsiStatement[]{statement}; - } - - @Nullable - static private ExtremumTerminal extractComplexRefCase(@NotNull PsiExpression condition, - @NotNull PsiStatement[] statements, - @NotNull TerminalBlock terminalBlock, - @Nullable List nonFinalVariables, - boolean isNegated) { - return extractRefCase(condition, statements, terminalBlock, FindExtremumMigration.ComplexExtremumTerminal::extract, nonFinalVariables, - isNegated); - } - - @Nullable - static private ExtremumTerminal extractSimpleRefCase(@NotNull PsiExpression condition, - @NotNull PsiStatement[] statements, - @NotNull TerminalBlock terminalBlock, - @Nullable List nonFinalVariables, - boolean isNegated) { - return extractRefCase(condition, statements, terminalBlock, FindExtremumMigration.SimpleRefExtremumTerminal::extract, - nonFinalVariables, isNegated); + .extract(nullCheckExpr, comparisonExpr, new PsiStatement[]{comparisonBranch}, terminalBlock, nonFinalVariables, false); } @Nullable @@ -198,15 +169,13 @@ public class FindExtremumMigration extends BaseStreamApiMigration { PsiExpression lOperand = binaryExpression.getLOperand(); PsiExpression rOperand = binaryExpression.getROperand(); if (!sign.equals(JavaTokenType.OROR) || rOperand == null) return null; - ExtremumTerminal firstWay = extractor.extractOriented(lOperand, rOperand, statements, terminalBlock, nonFinalVariables, isNegated); - if (firstWay != null) return firstWay; - return extractor.extractOriented(rOperand, lOperand, statements, terminalBlock, nonFinalVariables, isNegated); + return extractor.extractOriented(lOperand, rOperand, statements, terminalBlock, nonFinalVariables, isNegated); } static private boolean containsAnyVariable(@NotNull PsiExpression expression, @NotNull List variables) { for (PsiVariable variable : variables) { - if (ReferencesSearch.search(variable, new LocalSearchScope(expression)).findFirst() != null) return true; + if (VariableAccessUtils.variableIsUsed(variable, expression)) return true; } return false; } @@ -219,7 +188,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { } @Nullable - static PsiVariable getVariable(@Nullable PsiExpression expression) { + static PsiVariable resolveVariableReference(@Nullable PsiExpression expression) { PsiExpression nakedExpression = skipParenthesizedExprDown(expression); PsiReferenceExpression referenceExpression = tryCast(nakedExpression, PsiReferenceExpression.class); if (referenceExpression == null) return null; @@ -248,7 +217,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { interface Extractor { @Nullable ExtremumTerminal extractOriented(@NotNull PsiExpression nullCheckExpr, - @NotNull PsiExpression comparisionExpr, + @NotNull PsiExpression comparisonExpr, @NotNull PsiStatement[] statements, @NotNull TerminalBlock terminalBlock, @Nullable List nonFinalVars, @@ -304,9 +273,9 @@ public class FindExtremumMigration extends BaseStreamApiMigration { if (loopVarExpressionType == null) return null; String method = getComparingMethod(loopVarExpressionType); if (method == null) return null; - String lambdaText = name + "->" + myExtremumKeyExpr.getText(); + String lambdaText = LambdaUtil.createLambda(myTerminalBlock.getVariable(), myExtremumKeyExpr); String comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + method + "(" + lambdaText + ")"; - String stream = blockWithFilter.generate() + "." + getOpertion(myMax) + "(" + comparator + ").orElse(null)"; + String stream = blockWithFilter.generate() + "." + getOperation(myMax) + "(" + comparator + ").orElse(null)"; return replaceWithFindExtremum(myTerminalBlock.getMainLoop(), myExtremum, stream, myExtremumKey); } @@ -333,7 +302,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { ComplexAssignment assignment = ComplexAssignment.extract(statements, extremumNullChecked); if (assignment == null) return null; if (!assignment.getLoopVar().equals(terminalBlock.getVariable())) return null; - PsiVariable extremumKey = getVariable(comparison.getExtremumExpr()); + PsiVariable extremumKey = resolveVariableReference(comparison.getExtremumExpr()); if (extremumKey == null) return null; if (!extremumKey.equals(assignment.getExtremumKey())) return null; PsiVariable extremum = assignment.getExtremum(); @@ -394,6 +363,14 @@ public class FindExtremumMigration extends BaseStreamApiMigration { return myLoopVarExpression; } + /** + * Intended to recognize: + * extremum = loopVar; // max = current; + * extremumKey = loopVarExpr; // maxAge = current.getAge(); + * + * @param statements statements that contains only complex assignment + * @param nullCheckedExtremum extremum that will be used to recognize extremum assignment + */ @Nullable private static ComplexAssignment extract(@NotNull PsiStatement[] statements, @NotNull PsiVariable nullCheckedExtremum) { if (statements.length != 2) return null; @@ -410,12 +387,13 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @NotNull PsiVariable nullCheckedExtremum) { PsiAssignmentExpression firstAssignment = ExpressionUtils.getAssignment(first); PsiAssignmentExpression secondAssignment = ExpressionUtils.getAssignment(second); - PsiVariable extremum = getVariable(firstAssignment.getLExpression()); - PsiVariable loopVar = getVariable(firstAssignment.getRExpression()); - PsiVariable extremumKey = getVariable(secondAssignment.getLExpression()); + if(firstAssignment == null || secondAssignment == null) return null; + PsiVariable extremum = resolveVariableReference(firstAssignment.getLExpression()); + PsiVariable loopVar = resolveVariableReference(firstAssignment.getRExpression()); + PsiVariable extremumKey = resolveVariableReference(secondAssignment.getLExpression()); PsiExpression loopVarExpr = secondAssignment.getRExpression(); if (extremum == null || extremumKey == null || loopVar == null || loopVarExpr == null) return null; - if (extremum != nullCheckedExtremum) return null; + if (!extremum.equals(nullCheckedExtremum)) return null; return new ComplexAssignment(extremum, extremumKey, loopVar, loopVarExpr); } } @@ -476,7 +454,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { } - String stream = terminalBlock.generate() + "." + getOpertion(myMax) + "().orElse(" + extremumInitializer + ")"; + String stream = terminalBlock.generate() + "." + getOperation(myMax) + "().orElse(" + extremumInitializer + ")"; return replaceWithFindExtremum(loop, myExtremum, stream, null); } @@ -498,12 +476,12 @@ public class FindExtremumMigration extends BaseStreamApiMigration { if (statements.length != 1) return null; PsiAssignmentExpression assignment = ExpressionUtils.getAssignment(statements[0]); if (assignment == null) return null; - PsiVariable extremum = getVariable(assignment.getLExpression()); + PsiVariable extremum = resolveVariableReference(assignment.getLExpression()); if (extremum == null) return null; PsiExpression assignmentLoopVarExpr = assignment.getRExpression(); PsiExpression comparisonLoopVarExpr = comparison.getLoopVarExpr(); if (!ourEquivalence.expressionsAreEquivalent(assignmentLoopVarExpr, comparisonLoopVarExpr)) return null; - PsiVariable comparisonExtremum = getVariable(comparison.getExtremumExpr()); + PsiVariable comparisonExtremum = resolveVariableReference(comparison.getExtremumExpr()); if (comparisonExtremum == null) return null; if (!extremum.equals(comparisonExtremum)) return null; if (mayChangeBeforeLoop(extremum, terminalBlock)) return null; @@ -546,7 +524,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { if (name == null) return null; String lambdaText = name + "->" + myLoopVarExpression.getText(); String comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + method + "(" + lambdaText + ")"; - String stream = myTerminalBlock.generate() + "." + getOpertion(myMax) + "(" + comparator + ").orElse(null)"; + String stream = myTerminalBlock.generate() + "." + getOperation(myMax) + "(" + comparator + ").orElse(null)"; return replaceWithFindExtremum(myTerminalBlock.getMainLoop(), myExtremum, stream, null); } @@ -558,7 +536,7 @@ public class FindExtremumMigration extends BaseStreamApiMigration { @Nullable private static SimpleRefExtremumTerminal extract(@NotNull PsiExpression nullCheckExpr, - @NotNull PsiExpression comparisionExpr, + @NotNull PsiExpression comparisonExpr, @NotNull PsiStatement[] statements, @NotNull TerminalBlock terminalBlock, @Nullable List nonFinalVars, @@ -567,13 +545,13 @@ public class FindExtremumMigration extends BaseStreamApiMigration { if (nullCheckBinary == null) return null; PsiVariable nullCheckingVar = ExpressionUtils.getVariableFromNullComparison(nullCheckBinary, true); if (nullCheckingVar == null) return null; - Comparison comparison = Comparison.extract(comparisionExpr, terminalBlock.getVariable(), isNegated); + Comparison comparison = Comparison.extract(comparisonExpr, terminalBlock.getVariable(), isNegated); if (comparison == null) return null; if (statements.length != 1) return null; PsiAssignmentExpression assignment = ExpressionUtils.getAssignment(statements[0]); if (assignment == null) return null; - PsiVariable extremum = getVariable(assignment.getLExpression()); - PsiVariable loopVariable = getVariable(assignment.getRExpression()); + PsiVariable extremum = resolveVariableReference(assignment.getLExpression()); + PsiVariable loopVariable = resolveVariableReference(assignment.getRExpression()); if (extremum == null || loopVariable == null) return null; if (nullCheckingVar != extremum) return null; if (!loopVariable.equals(terminalBlock.getVariable())) return null; diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java index 329d76715599..f1477e2a5abe 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java @@ -495,7 +495,7 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo } FindExtremumMigration.ExtremumTerminal extremumTerminal = FindExtremumMigration.extract(tb, nonFinalVariables); if(extremumTerminal != null) { - return new FindExtremumMigration(true, FindExtremumMigration.getOpertion(extremumTerminal.isMax()) + "()"); + return new FindExtremumMigration(true, FindExtremumMigration.getOperation(extremumTerminal.isMax()) + "()"); } for (OperationReductionMigration.ReductionOperation reductionOperation : OperationReductionMigration.OPERATIONS) { if (getAccumulatedVariable(tb, nonFinalVariables, reductionOperation) != null) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference4.java deleted file mode 100644 index 35e4495bf19f..000000000000 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference4.java +++ /dev/null @@ -1,34 +0,0 @@ -// "Replace with max()" "true" - -import java.util.*; - -public class Main { - static class Person { - String name; - int age; - - public String getName() { - return name; - } - - public int getAge() { - return age; - } - - public Person(String name, int age) { - this.name = name; - this.age = age; - } - } - - public Person max() { - List personList = Arrays.asList( - new Person("Roman", 21), - new Person("James", 25), - new Person("Kelly", 12) - ); - Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); - - return maxPerson; - } -} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference4.java index e55ef0f62c56..e8f11be2891e 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference4.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference4.java @@ -1,4 +1,4 @@ -// "Replace with max()" "true" +// "Replace with max()" "false" import java.util.*; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceField.java index 99351d7f6c65..6bdee6f2db9b 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceField.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceField.java @@ -30,7 +30,7 @@ public class Main { Person maxPerson = null; for (Person p : personList) { if(p.getAge() > 13) { - if (p.age > maxPerson.age || maxPerson == null) { + if (maxPerson == null || p.age > maxPerson.age) { maxPerson = p; } } diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java index 61a5c9c02f5e..a692c2511412 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java @@ -762,6 +762,7 @@ public class ExpressionUtils { * @return extracted assignment or null if assignment is not found or assignment is compound */ @Contract("null -> null") + @Nullable public static PsiAssignmentExpression getAssignment(PsiElement element) { if(element instanceof PsiExpressionStatement) { element = ((PsiExpressionStatement)element).getExpression(); From a6d1a42f3461b323c8c75e29f21a4fb2678bc650 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Fri, 28 Jul 2017 16:54:22 +0700 Subject: [PATCH 18/28] fix notes from review : IDEA-CR-23237 --- .../FindExtremumMigration.java | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 42628e234825..8b472e0fa5bf 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -258,6 +258,11 @@ class FindExtremumMigration extends BaseStreamApiMigration { @Nullable @Override public PsiElement replace() { + PsiType loopVarExpressionType = myExtremumKeyExpr.getType(); + if (loopVarExpressionType == null) return null; + String method = getComparingMethod(loopVarExpressionType); + if (method == null) return null; + String inFilterOperation = myMax ? ">=" : "<="; PsiLoopStatement loop = myTerminalBlock.getMainLoop(); PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(loop.getProject()); @@ -269,10 +274,6 @@ class FindExtremumMigration extends BaseStreamApiMigration { TerminalBlock blockWithFilter = myTerminalBlock.add(new StreamApiMigrationInspection.FilterOp(condition, myTerminalBlock.getVariable(), false)); - PsiType loopVarExpressionType = myExtremumKeyExpr.getType(); - if (loopVarExpressionType == null) return null; - String method = getComparingMethod(loopVarExpressionType); - if (method == null) return null; String lambdaText = LambdaUtil.createLambda(myTerminalBlock.getVariable(), myExtremumKeyExpr); String comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + method + "(" + lambdaText + ")"; String stream = blockWithFilter.generate() + "." + getOperation(myMax) + "(" + comparator + ").orElse(null)"; @@ -425,7 +426,13 @@ class FindExtremumMigration extends BaseStreamApiMigration { @Nullable @Override public PsiElement replace() { - //myTerminalBlock.generate() + String name = myTerminalBlock.getVariable().getName(); + if (name == null) return null; + PsiType type = myExtremumInitializer.getType(); + if (type == null) return null; + Object initializerValue = ExpressionUtils.computeConstantExpression(myExtremumInitializer); + if (initializerValue == null) return null; + TerminalBlock blockWithMap = myTerminalBlock .add(new StreamApiMigrationInspection.MapOp(myLoopVarExpression, myTerminalBlock.getVariable(), myLoopVarExpression.getType())); @@ -433,17 +440,9 @@ class FindExtremumMigration extends BaseStreamApiMigration { PsiLoopStatement loop = blockWithMap.getMainLoop(); PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(loop.getProject()); String extremumInitializer = myExtremumInitializer.getText(); - - PsiType type = myExtremumInitializer.getType(); - if (type == null) return null; - Object initializerValue = ExpressionUtils.computeConstantExpression(myExtremumInitializer); - if (initializerValue == null) return null; - Object nonFilterableInitialValue = getNonFilterableInitialValue(type, myMax); final TerminalBlock terminalBlock; if (nonFilterableInitialValue != null && !nonFilterableInitialValue.equals(initializerValue)) { - String name = myTerminalBlock.getVariable().getName(); - if (name == null) return null; PsiExpression condition = elementFactory.createExpressionFromText(name + inFilterOperation + extremumInitializer, loop); From 55dca62f935f3504c4eedad327d663441194238d Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Mon, 31 Jul 2017 12:52:25 +0700 Subject: [PATCH 19/28] add external comparator support --- .../FindExtremumMigration.java | 154 ++++++++++++++---- .../minMax/afterMaxComparable.java | 34 ++++ .../minMax/afterMaxComparableMaxAsArg.java | 41 +++++ .../minMax/afterMaxComparator.java | 36 ++++ .../minMax/beforeMaxComparable.java | 41 +++++ .../minMax/beforeMaxComparableMaxAsArg.java | 41 +++++ .../minMax/beforeMaxComparator.java | 42 +++++ 7 files changed, 358 insertions(+), 31 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparable.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparableMaxAsArg.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparator.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparable.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparableMaxAsArg.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparator.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 8b472e0fa5bf..4116f4b4e0dc 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -21,6 +21,7 @@ import com.intellij.psi.*; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.tree.IElementType; +import com.intellij.psi.util.InheritanceUtil; import com.siyeh.ig.psiutils.ControlFlowUtils; import com.siyeh.ig.psiutils.EquivalenceChecker; import com.siyeh.ig.psiutils.ExpressionUtils; @@ -62,13 +63,10 @@ class FindExtremumMigration extends BaseStreamApiMigration { if (type.equals(PsiType.INT)) return "comparingInt"; if (type.equals(PsiType.DOUBLE)) return "comparingDouble"; if (type.equals(PsiType.LONG)) return "comparingLong"; + if (InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_LANG_COMPARABLE)) return "comparing"; return null; } - static private boolean hasKnownComparableType(@NotNull PsiType type) { - return type.equals(PsiType.INT) || type.equals(PsiType.LONG) || type.equals(PsiType.DOUBLE); - } - @Nullable static private Object getNonFilterableInitialValue(@NotNull PsiType type, boolean isMax) { if (type.equals(PsiType.INT)) { @@ -192,7 +190,9 @@ class FindExtremumMigration extends BaseStreamApiMigration { PsiExpression nakedExpression = skipParenthesizedExprDown(expression); PsiReferenceExpression referenceExpression = tryCast(nakedExpression, PsiReferenceExpression.class); if (referenceExpression == null) return null; - return tryCast(referenceExpression.resolve(), PsiVariable.class); + PsiLocalVariable localVariable = tryCast(referenceExpression.resolve(), PsiLocalVariable.class); + if (localVariable != null) return localVariable; + return tryCast(referenceExpression.resolve(), PsiParameter.class); } private static boolean equalShape(@NotNull PsiExpression first, @@ -206,6 +206,18 @@ class FindExtremumMigration extends BaseStreamApiMigration { return ourEquivalence.expressionsAreEquivalent(first, secondCopy); } + private static boolean hasKnownComparableType(@NotNull Comparison comparison, @Nullable PsiType type) { + if (!comparison.isExternalComparison()) { + if (type == null || !(type.equals(PsiType.INT) || + type.equals(PsiType.LONG) || + type.equals(PsiType.DOUBLE) || + InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_LANG_COMPARABLE))) { + return false; + } + } + return true; + } + interface ExtremumTerminal { @Nullable PsiElement replace(); @@ -318,14 +330,15 @@ class FindExtremumMigration extends BaseStreamApiMigration { if (containsAnyVariable(assignment.getLoopVarExpression(), nonFinalVariables)) return null; } PsiType loopVarExprType = loopVarExpr.getType(); - if (loopVarExprType == null || !hasKnownComparableType(loopVarExprType)) return null; + if (!hasKnownComparableType(comparison, loopVarExprType)) return null; PsiExpression extremumInitializer = extremum.getInitializer(); PsiExpression extremumKeyInitializer = extremumKey.getInitializer(); if (extremumInitializer == null || extremumKeyInitializer == null) return null; if (!ExpressionUtils.isNullLiteral(extremumInitializer)) return null; if (!ExpressionUtils.isEvaluatedAtCompileTime(extremumKeyInitializer)) return null; - return new ComplexExtremumTerminal(comparison.isMax(), extremum, extremumKey, extremumKeyInitializer, loopVarExpr, terminalBlock); + return new ComplexExtremumTerminal(comparison.isMax(), extremum, extremumKey, extremumKeyInitializer, loopVarExpr, terminalBlock + ); } private static class ComplexAssignment { @@ -369,7 +382,7 @@ class FindExtremumMigration extends BaseStreamApiMigration { * extremum = loopVar; // max = current; * extremumKey = loopVarExpr; // maxAge = current.getAge(); * - * @param statements statements that contains only complex assignment + * @param statements statements that contains only complex assignment * @param nullCheckedExtremum extremum that will be used to recognize extremum assignment */ @Nullable @@ -386,16 +399,13 @@ class FindExtremumMigration extends BaseStreamApiMigration { private static ComplexAssignment extract(@NotNull PsiStatement first, @NotNull PsiStatement second, @NotNull PsiVariable nullCheckedExtremum) { - PsiAssignmentExpression firstAssignment = ExpressionUtils.getAssignment(first); PsiAssignmentExpression secondAssignment = ExpressionUtils.getAssignment(second); - if(firstAssignment == null || secondAssignment == null) return null; - PsiVariable extremum = resolveVariableReference(firstAssignment.getLExpression()); - PsiVariable loopVar = resolveVariableReference(firstAssignment.getRExpression()); + if (secondAssignment == null) return null; + PsiVariable loopVar = resolveVariableReference(ExpressionUtils.getAssignmentTo(first, nullCheckedExtremum)); PsiVariable extremumKey = resolveVariableReference(secondAssignment.getLExpression()); PsiExpression loopVarExpr = secondAssignment.getRExpression(); - if (extremum == null || extremumKey == null || loopVar == null || loopVarExpr == null) return null; - if (!extremum.equals(nullCheckedExtremum)) return null; - return new ComplexAssignment(extremum, extremumKey, loopVar, loopVarExpr); + if (extremumKey == null || loopVar == null || loopVarExpr == null) return null; + return new ComplexAssignment(nullCheckedExtremum, extremumKey, loopVar, loopVarExpr); } } } @@ -488,11 +498,12 @@ class FindExtremumMigration extends BaseStreamApiMigration { if (containsAnyVariable(comparisonLoopVarExpr, nonFinalVariables)) return null; } PsiType loopVarExprType = comparisonLoopVarExpr.getType(); - if (loopVarExprType == null || !hasKnownComparableType(loopVarExprType)) return null; + if (!hasKnownComparableType(comparison, loopVarExprType)) return null; PsiExpression extremumInitializer = extremum.getInitializer(); if (!ExpressionUtils.isEvaluatedAtCompileTime(extremumInitializer)) return null; - return new PrimitiveExtremumTerminal(comparison.isMax(), terminalBlock, comparisonLoopVarExpr, extremum, extremumInitializer); + return new PrimitiveExtremumTerminal(comparison.isMax(), terminalBlock, comparisonLoopVarExpr, extremum, extremumInitializer + ); } } @@ -501,15 +512,18 @@ class FindExtremumMigration extends BaseStreamApiMigration { private final @NotNull TerminalBlock myTerminalBlock; private final @NotNull PsiExpression myLoopVarExpression; private final @NotNull PsiVariable myExtremum; + private final @Nullable PsiVariable myComparator; private SimpleRefExtremumTerminal(boolean max, @NotNull TerminalBlock block, @NotNull PsiExpression loopVarExpression, - @NotNull PsiVariable extremum) { + @NotNull PsiVariable extremum, + @Nullable PsiVariable comparator) { myMax = max; myTerminalBlock = block; myLoopVarExpression = loopVarExpression; myExtremum = extremum; + myComparator = comparator; } @Nullable @@ -517,12 +531,17 @@ class FindExtremumMigration extends BaseStreamApiMigration { public PsiElement replace() { PsiType loopVarExpressionType = myLoopVarExpression.getType(); if (loopVarExpressionType == null) return null; - String method = getComparingMethod(loopVarExpressionType); - if (method == null) return null; - String name = myTerminalBlock.getVariable().getName(); - if (name == null) return null; - String lambdaText = name + "->" + myLoopVarExpression.getText(); - String comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + method + "(" + lambdaText + ")"; + final String comparator; + if(myComparator == null) { + String method = getComparingMethod(loopVarExpressionType); + if (method == null) return null; + String lambdaText = LambdaUtil.createLambda(myTerminalBlock.getVariable(), myLoopVarExpression); + comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + method + "(" + lambdaText + ")"; + } else { + String comparatorName = myComparator.getName(); + if(comparatorName == null) return null; + comparator = comparatorName; + } String stream = myTerminalBlock.generate() + "." + getOperation(myMax) + "(" + comparator + ").orElse(null)"; return replaceWithFindExtremum(myTerminalBlock.getMainLoop(), myExtremum, stream, null); } @@ -567,13 +586,13 @@ class FindExtremumMigration extends BaseStreamApiMigration { if (containsAnyVariable(loopVarExpr, nonFinalVars)) return null; } PsiType loopVarExprType = loopVarExpr.getType(); - if (loopVarExprType == null || !hasKnownComparableType(loopVarExprType)) return null; + if (!hasKnownComparableType(comparison, loopVarExprType)) return null; boolean max = comparison.isMax(); PsiExpression initializer = extremum.getInitializer(); if (!ExpressionUtils.isNullLiteral(initializer)) return null; - return new SimpleRefExtremumTerminal(max, terminalBlock, loopVarExpr, extremum); + return new SimpleRefExtremumTerminal(max, terminalBlock, loopVarExpr, extremum, comparison.getComparator()); } } @@ -581,11 +600,19 @@ class FindExtremumMigration extends BaseStreamApiMigration { private final @NotNull PsiExpression myExtremumExpr; private final @NotNull PsiExpression myLoopVarExpr; private final boolean myIsMax; + private final @Nullable PsiVariable myComparator; + private final boolean myExternalComparison; - private Comparison(@NotNull PsiExpression extremumExpr, @NotNull PsiExpression loopVarExpr, boolean max) { + private Comparison(@NotNull PsiExpression extremumExpr, + @NotNull PsiExpression loopVarExpr, + boolean max, + @Nullable PsiVariable comparator, + boolean externalComparison) { myExtremumExpr = extremumExpr; myLoopVarExpr = loopVarExpr; myIsMax = max; + myComparator = comparator; + myExternalComparison = externalComparison; } @NotNull @@ -602,6 +629,15 @@ class FindExtremumMigration extends BaseStreamApiMigration { return myIsMax; } + @Nullable + public PsiVariable getComparator() { + return myComparator; + } + + public boolean isExternalComparison() { + return myExternalComparison; + } + @Nullable static Comparison extract(@NotNull PsiExpression expression, @NotNull PsiVariable loopVariable, boolean isNegated) { @@ -612,19 +648,75 @@ class FindExtremumMigration extends BaseStreamApiMigration { if (rOperand == null) return null; PsiExpression lOperand = binaryExpression.getLOperand(); if (sign.equals(JavaTokenType.LT) || sign.equals(JavaTokenType.LE)) { - return extract(lOperand, rOperand, loopVariable, isNegated); + Comparison extract = extractComparatorLikeComparison(lOperand, rOperand, loopVariable, isNegated); + if (extract != null) return extract; + return extract(lOperand, rOperand, loopVariable, isNegated, null, false); } else if (sign.equals(JavaTokenType.GT) || sign.equals(JavaTokenType.GE)) { - return extract(lOperand, rOperand, loopVariable, !isNegated); + Comparison extract = extractComparatorLikeComparison(lOperand, rOperand, loopVariable, !isNegated); + if (extract != null) return extract; + return extract(lOperand, rOperand, loopVariable, !isNegated, null, false); } return null; } + @Nullable + private static Comparison extractComparatorLikeComparison(@NotNull PsiExpression expression, + @NotNull PsiVariable loopVariable, + boolean isGreater) { + + PsiMethodCallExpression methodExpression = tryCast(expression, PsiMethodCallExpression.class); + if (methodExpression == null) return null; + PsiExpression qualifierExpression = methodExpression.getMethodExpression().getQualifierExpression(); + if (qualifierExpression == null) return null; + PsiMethod method = methodExpression.resolveMethod(); + if (method == null) return null; + String methodName = method.getName(); + PsiType qualifierType = qualifierExpression.getType(); + PsiExpressionList argumentList = methodExpression.getArgumentList(); + PsiExpression[] arguments = argumentList.getExpressions(); + if (arguments.length == 1) { + PsiExpression argument = arguments[0]; + + if (!methodName.equals("compareTo") || !InheritanceUtil.isInheritor(qualifierType, CommonClassNames.JAVA_LANG_COMPARABLE)) { + return null; + } + return extract(argument, qualifierExpression, loopVariable, isGreater, null, false); + } + else if (arguments.length == 2) { + PsiExpression firstArgument = arguments[0]; + PsiExpression secondArgument = arguments[1]; + if (!methodName.equals("compare") || !InheritanceUtil.isInheritor(qualifierType, CommonClassNames.JAVA_UTIL_COMPARATOR)) { + return null; + } + PsiVariable comparator = resolveVariableReference(qualifierExpression); + return extract(secondArgument, firstArgument, loopVariable, isGreater, comparator, true); + } + return null; + } + + @Nullable + private static Comparison extractComparatorLikeComparison(@NotNull PsiExpression lOperand, + @NotNull PsiExpression rOperand, + @NotNull PsiVariable loopVariable, + boolean isGreater) { + if (ExpressionUtils.isZero(lOperand)) { + return extractComparatorLikeComparison(rOperand, loopVariable, isGreater); + } + else if (ExpressionUtils.isZero(rOperand)) { + return extractComparatorLikeComparison(lOperand, loopVariable, !isGreater); + } + return null; + } + + @Nullable private static Comparison extract(@NotNull PsiExpression lOperand, @NotNull PsiExpression rOperand, @NotNull PsiVariable loopVariable, - boolean isGreater) { + boolean isGreater, + @Nullable PsiVariable comparator, + boolean externalComparison) { final boolean max; final PsiExpression extremumExpr; final PsiExpression loopVarExpr; @@ -641,7 +733,7 @@ class FindExtremumMigration extends BaseStreamApiMigration { else { return null; } - return new Comparison(extremumExpr, loopVarExpr, max); + return new Comparison(extremumExpr, loopVarExpr, max, comparator, externalComparison); } } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparable.java new file mode 100644 index 000000000000..6269b15ea43c --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparable.java @@ -0,0 +1,34 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparing(Person::getName)).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparableMaxAsArg.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparableMaxAsArg.java new file mode 100644 index 000000000000..8c3df0b76ffb --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparableMaxAsArg.java @@ -0,0 +1,41 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null || p.getName().compareTo(maxPerson.getName()) < 0) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparator.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparator.java new file mode 100644 index 000000000000..5d110312c0d5 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparator.java @@ -0,0 +1,36 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson; + Comparator personComparator = Comparator.comparingInt(Person::getAge); + maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(personComparator).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparable.java new file mode 100644 index 000000000000..c420415ca67f --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparable.java @@ -0,0 +1,41 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null || maxPerson.getName().compareTo(p.getName()) < 0) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparableMaxAsArg.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparableMaxAsArg.java new file mode 100644 index 000000000000..f8e664ba34a2 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparableMaxAsArg.java @@ -0,0 +1,41 @@ +// "Replace with max()" "false" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null || p.getName().compareTo(maxPerson.getName()) < 0) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparator.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparator.java new file mode 100644 index 000000000000..fcfc63b81cc3 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparator.java @@ -0,0 +1,42 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + Comparator personComparator = Comparator.comparingInt(Person::getAge); + for(Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null || personComparator.compare(maxPerson, p) < 0) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file From 300103bcd06d5be6dc628ad7806af9e84c4c751e Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Mon, 31 Jul 2017 12:55:39 +0700 Subject: [PATCH 20/28] fix code inspection: imports, constants --- .../FindExtremumMigration.java | 20 ++++++++++--------- .../OperationReductionMigration.java | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 4116f4b4e0dc..5053535682eb 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -91,7 +91,10 @@ class FindExtremumMigration extends BaseStreamApiMigration { if (block != null) { boolean negated = filterOp.isNegated(); PsiExpression condition = filterOp.getExpression(); - ExtremumTerminal simpleRefCase = extractRefCase(condition, statements, block, SimpleRefExtremumTerminal::extract, + ExtremumTerminal simpleRefCase = extractRefCase(condition, statements, block, + (nullCheckExpr, comparisonExpr, statements1, terminalBlock1, nonFinalVars, isNegated) -> SimpleRefExtremumTerminal + .extract(nullCheckExpr, comparisonExpr, statements1, terminalBlock1, + nonFinalVars), nonFinalVariables, negated); if (simpleRefCase != null) return simpleRefCase; ExtremumTerminal primitiveCase = PrimitiveExtremumTerminal.extract(condition, statements, block, nonFinalVariables, negated); @@ -151,7 +154,7 @@ class FindExtremumMigration extends BaseStreamApiMigration { @Nullable List nonFinalVariables) { if (!ourEquivalence.statementsAreEquivalent(nullCheckBranch, comparisonBranch)) return null; return SimpleRefExtremumTerminal - .extract(nullCheckExpr, comparisonExpr, new PsiStatement[]{comparisonBranch}, terminalBlock, nonFinalVariables, false); + .extract(nullCheckExpr, comparisonExpr, new PsiStatement[]{comparisonBranch}, terminalBlock, nonFinalVariables); } @Nullable @@ -342,10 +345,10 @@ class FindExtremumMigration extends BaseStreamApiMigration { } private static class ComplexAssignment { - private @NotNull PsiVariable myExtremum; - private @NotNull PsiVariable myExtremumKey; - private @NotNull PsiVariable myLoopVar; // extremum = loopVar; - private @NotNull PsiExpression myLoopVarExpression; + private @NotNull final PsiVariable myExtremum; + private @NotNull final PsiVariable myExtremumKey; + private @NotNull final PsiVariable myLoopVar; // extremum = loopVar; + private @NotNull final PsiExpression myLoopVarExpression; private ComplexAssignment(@NotNull PsiVariable extremum, @NotNull PsiVariable extremumKey, @@ -557,13 +560,12 @@ class FindExtremumMigration extends BaseStreamApiMigration { @NotNull PsiExpression comparisonExpr, @NotNull PsiStatement[] statements, @NotNull TerminalBlock terminalBlock, - @Nullable List nonFinalVars, - boolean isNegated) { + @Nullable List nonFinalVars) { PsiBinaryExpression nullCheckBinary = tryCast(nullCheckExpr, PsiBinaryExpression.class); if (nullCheckBinary == null) return null; PsiVariable nullCheckingVar = ExpressionUtils.getVariableFromNullComparison(nullCheckBinary, true); if (nullCheckingVar == null) return null; - Comparison comparison = Comparison.extract(comparisonExpr, terminalBlock.getVariable(), isNegated); + Comparison comparison = Comparison.extract(comparisonExpr, terminalBlock.getVariable(), false); if (comparison == null) return null; if (statements.length != 1) return null; PsiAssignmentExpression assignment = ExpressionUtils.getAssignment(statements[0]); diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/OperationReductionMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/OperationReductionMigration.java index 878a28ae96ba..01034b4c4592 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/OperationReductionMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/OperationReductionMigration.java @@ -66,7 +66,7 @@ public class OperationReductionMigration extends BaseStreamApiMigration { PsiExpression initializer = var.getInitializer(); String identity = initializer != null && myReductionOperation.getInitializerExpressionRestriction().test(initializer) ? initializer.getText() - : myReductionOperation.myIdentity; + : myReductionOperation.getIdentity(); String stream = tb.add(new StreamApiMigrationInspection.MapOp(operand, tb.getVariable(), type)).generate() + String.format(Locale.ENGLISH, ".reduce(%s, (%s, %s) -> %s %s %s)", identity, leftOperand, rightOperand, leftOperand, From 21fe8a94dc8528829779d9ad7c38dfce484f1db8 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Thu, 20 Jul 2017 16:29:54 +0700 Subject: [PATCH 21/28] first steps to support min/max support simple case without many checks extract test cases largely refactor find extremum migration to make it extensible add basic support for primitive streams minor refactoring minor refactoring minor refactoring : IDEA-CR-23237 minor refactoring : IDEA-CR-23237 fix selector shape comparision : IDEA-CR-23237 refactor code : IDEA-CR-23237 simplify : IDEA-CR-23237 correct handling of declaration usage status : IDEA-CR-23237 refactor FindExtremum, now it recognize complex patterns : IDEA-CR-23237 add tests, ensure type is known to be comparable : IDEA-CR-23237 add support for negated filter operation : IDEA-CR-23237 fix notes from review : IDEA-CR-23237 fix notes from review : IDEA-CR-23237 add external comparator support fix code inspection: imports, constants --- .../BaseStreamApiMigration.java | 15 + .../FindExtremumMigration.java | 741 ++++++++++++++++++ .../OperationReductionMigration.java | 2 +- .../StreamApiMigrationInspection.java | 4 + .../streamMigration/TerminalBlock.java | 8 + .../{ => allMatch}/afterAllMatch.java | 0 .../{ => allMatch}/afterAllMatchChain.java | 0 .../{ => allMatch}/afterAllMatchContinue.java | 0 .../afterAllMatchMethodRef.java | 0 .../{ => allMatch}/beforeAllMatch.java | 0 .../{ => allMatch}/beforeAllMatchChain.java | 0 .../beforeAllMatchContinue.java | 0 .../beforeAllMatchMethodRef.java | 0 .../{ => anyMatch}/afterAnyMatch.java | 0 .../afterAnyMatchArrayAssignment.java | 0 .../afterAnyMatchAssignment.java | 0 .../afterAnyMatchAssignmentBoolean.java | 0 ...fterAnyMatchAssignmentBooleanInverted.java | 0 .../afterAnyMatchAssignmentExtraCode.java | 0 .../afterAnyMatchAssignmentNonTrivial.java | 0 ...nyMatchAssignmentNonTrivialUnassigned.java | 0 .../afterAnyMatchAssignmentTryCatch.java | 0 .../afterAnyMatchAssignmentTryCatch2.java | 0 .../{ => anyMatch}/afterAnyMatchChain.java | 0 .../afterAnyMatchCompoundAssignment.java | 0 .../afterAnyMatchCustomReturn.java | 0 .../afterAnyMatchEnclosingIf.java | 0 .../afterAnyMatchEnclosingIfBlock.java | 0 .../afterAnyMatchEnclosingIfInterrupted.java | 0 .../{ => anyMatch}/afterAnyMatchExtends.java | 0 .../afterAnyMatchMethodCall.java | 0 .../afterAnyMatchPrimitive.java | 0 .../{ => anyMatch}/afterAnyMatchReturn.java | 0 .../afterAnyMatchUnreachableReturn.java | 0 .../{ => anyMatch}/afterAnyMatchVoid.java | 0 .../{ => anyMatch}/afterNestedAnyMatch.java | 0 .../{ => anyMatch}/beforeAnyMatch.java | 0 .../beforeAnyMatchArrayAssignment.java | 0 .../beforeAnyMatchAssignment.java | 0 .../beforeAnyMatchAssignmentBoolean.java | 0 ...foreAnyMatchAssignmentBooleanInverted.java | 0 .../beforeAnyMatchAssignmentExtraCode.java | 0 .../beforeAnyMatchAssignmentNonTrivial.java | 0 ...nyMatchAssignmentNonTrivialUnassigned.java | 0 .../beforeAnyMatchAssignmentTryCatch.java | 0 .../beforeAnyMatchAssignmentTryCatch2.java | 0 .../{ => anyMatch}/beforeAnyMatchChain.java | 0 .../beforeAnyMatchCompoundAssignment.java | 0 .../beforeAnyMatchCustomReturn.java | 0 .../beforeAnyMatchEnclosingIf.java | 0 .../beforeAnyMatchEnclosingIfBlock.java | 0 .../beforeAnyMatchEnclosingIfInterrupted.java | 0 .../{ => anyMatch}/beforeAnyMatchExtends.java | 0 .../{ => anyMatch}/beforeAnyMatchFloat.java | 0 .../beforeAnyMatchMethodCall.java | 0 .../beforeAnyMatchNonFinal.java | 0 .../beforeAnyMatchPrimitive.java | 0 .../beforeAnyMatchReferNonFinal.java | 0 .../{ => anyMatch}/beforeAnyMatchReturn.java | 0 .../beforeAnyMatchReturnDifferent.java | 0 .../beforeAnyMatchReturnInterrupted.java | 0 .../beforeAnyMatchUnreachableReturn.java | 0 .../{ => anyMatch}/beforeAnyMatchUsesVar.java | 0 .../{ => anyMatch}/beforeAnyMatchVoid.java | 0 .../{ => anyMatch}/beforeNestedAnyMatch.java | 0 .../beforeNestedAnyMatchFailed.java | 0 .../afterBufferedReaderModifiedLine.java | 0 .../afterBufferedReaderSum.java | 0 ...foreBufferedReaderComplexModifiedLine.java | 0 .../beforeBufferedReaderModifiedLine.java | 0 .../beforeBufferedReaderSum.java | 0 .../beforeBufferedReaderSumLineReused.java | 0 .../{ => collect}/afterAddPrimitive.java | 0 .../afterArrayFilterCollect.java | 0 .../afterArrayListVariableType.java | 0 .../afterBufferedReaderCollect.java | 0 .../afterBufferedReaderCollectNestedOk.java | 0 .../{ => collect}/afterCollectAnonymous.java | 0 .../{ => collect}/afterCollectArrayList.java | 0 .../afterCollectArrayListAndFilter.java | 0 .../afterCollectArrayListCollection.java | 0 .../afterCollectArrayListComment.java | 0 ...erCollectArrayListCompoundDeclaration.java | 0 .../afterCollectArrayListLambda.java | 0 ...CollectArrayListNonTrivialInitializer.java | 0 .../{ => collect}/afterCollectBoxed.java | 0 .../{ => collect}/afterCollectCast.java | 0 .../afterCollectContravariant.java | 0 .../afterCollectCustomConstructor.java | 0 .../{ => collect}/afterCollectGuava.java | 0 .../{ => collect}/afterCollectGuavaMap.java | 0 .../{ => collect}/afterCollectGuavaSet.java | 0 .../{ => collect}/afterCollectHashSet.java | 0 .../afterCollectHashSetFieldInitializer.java | 0 .../afterCollectInterrupted.java | 0 .../afterCollectInterruptedInLoop.java | 0 .../afterCollectInterruptedUpdated.java | 0 .../afterCollectInterruptedUsed.java | 0 .../{ => collect}/afterCollectLambda.java | 0 .../afterCollectLinkedHashSet.java | 0 .../afterCollectListSuperType.java | 0 .../{ => collect}/afterCollectNewList.java | 0 .../afterCollectNewListArray.java | 0 .../afterCollectNewListArrayInCall.java | 0 .../afterCollectNewTreeSetArray.java | 0 .../{ => collect}/afterCollectNulls.java | 0 .../afterCollectSelfCollection.java | 0 .../afterCollectSetParameter.java | 0 .../{ => collect}/afterCollectSorted.java | 0 .../afterCollectSortedNatural.java | 0 .../{ => collect}/afterCollectSupertype.java | 0 .../{ => collect}/afterCollectToMap.java | 0 .../{ => collect}/afterCollectToMapPut.java | 0 .../afterCollectToMapPutIfAbsent.java | 0 .../{ => collect}/afterCollectToObj.java | 0 .../afterCollectWithSameLambda.java | 0 .../afterGroupingByArrayList.java | 0 .../afterGroupingByCustomCollection.java | 0 .../afterGroupingByDownstream.java | 0 .../{ => collect}/afterGroupingBySimple.java | 0 .../{ => collect}/afterJoining.java | 0 .../{ => collect}/afterJoiningAssign.java | 0 .../{ => collect}/afterJoiningConcat.java | 0 .../{ => collect}/afterJoiningDelimited.java | 0 .../{ => collect}/afterJoiningInBrackets.java | 0 .../afterJoiningInitialValue.java | 0 .../{ => collect}/afterJoiningReused.java | 0 .../afterJoiningStringBuilderReused.java | 0 .../{ => collect}/afterJoiningUsingIndex.java | 0 .../{ => collect}/afterWildcardCollect.java | 0 .../{ => collect}/beforeAddPrimitive.java | 0 .../beforeArrayFilterCollect.java | 0 .../beforeArrayListVariableType.java | 0 .../beforeBufferedReaderCollect.java | 0 .../beforeBufferedReaderCollectNested.java | 0 .../beforeBufferedReaderCollectNestedOk.java | 0 .../{ => collect}/beforeCollectAnonymous.java | 0 .../{ => collect}/beforeCollectArrayList.java | 0 .../beforeCollectArrayListAndFilter.java | 0 .../beforeCollectArrayListCollection.java | 0 .../beforeCollectArrayListComment.java | 0 ...reCollectArrayListCompoundDeclaration.java | 0 .../beforeCollectArrayListLambda.java | 0 ...CollectArrayListNonTrivialInitializer.java | 0 .../{ => collect}/beforeCollectBoxed.java | 0 .../{ => collect}/beforeCollectCast.java | 0 .../beforeCollectContravariant.java | 0 .../beforeCollectCustomConstructor.java | 0 .../{ => collect}/beforeCollectGuava.java | 0 .../{ => collect}/beforeCollectGuavaMap.java | 0 .../beforeCollectGuavaNonEmpty.java | 0 .../{ => collect}/beforeCollectGuavaSet.java | 0 .../{ => collect}/beforeCollectHashSet.java | 0 .../beforeCollectHashSetFieldInitializer.java | 0 .../beforeCollectIdentityMap.java | 0 .../beforeCollectInterrupted.java | 0 .../beforeCollectInterruptedInLoop.java | 0 .../beforeCollectInterruptedUpdated.java | 0 .../beforeCollectInterruptedUsed.java | 0 .../beforeCollectInterruptedUsedFinal.java | 0 .../{ => collect}/beforeCollectLambda.java | 0 .../beforeCollectLinkedHashSet.java | 0 .../beforeCollectListSuperType.java | 0 .../{ => collect}/beforeCollectNewList.java | 0 .../beforeCollectNewListArray.java | 0 .../beforeCollectNewListArrayInCall.java | 0 .../beforeCollectNewTreeSetArray.java | 0 .../{ => collect}/beforeCollectNulls.java | 0 ...ollectQualifierDependsOnLoopParameter.java | 0 .../beforeCollectSelfCollection.java | 0 .../beforeCollectSetParameter.java | 0 .../{ => collect}/beforeCollectSorted.java | 0 .../beforeCollectSortedNatural.java | 0 .../{ => collect}/beforeCollectSupertype.java | 0 .../{ => collect}/beforeCollectToMap.java | 0 .../{ => collect}/beforeCollectToMapPut.java | 0 .../beforeCollectToMapPutIfAbsent.java | 0 .../beforeCollectToMapPutInvalid.java | 0 .../{ => collect}/beforeCollectToObj.java | 0 .../beforeCollectWithAnonymous.java | 0 .../beforeCollectWithLambda.java | 0 .../beforeCollectWithSameLambda.java | 0 .../beforeGroupingByArrayList.java | 0 .../beforeGroupingByCustomCollection.java | 0 .../beforeGroupingByDownstream.java | 0 .../{ => collect}/beforeGroupingBySimple.java | 0 .../{ => collect}/beforeJoining.java | 0 .../{ => collect}/beforeJoiningAssign.java | 0 .../{ => collect}/beforeJoiningConcat.java | 0 .../{ => collect}/beforeJoiningDelimited.java | 0 .../beforeJoiningDelimitedWrongBuilder.java | 0 .../beforeJoiningInBrackets.java | 0 .../beforeJoiningInitialValue.java | 0 .../{ => collect}/beforeJoiningReused.java | 0 .../beforeJoiningStringBuilderReused.java | 0 .../beforeJoiningUsingIndex.java | 0 .../{ => collect}/beforeWildcardCollect.java | 0 .../afterCollectionsAddAllArray.java | 0 .../afterCollectionsAddAllPrimitive.java | 0 .../afterCollectionsAddAllVarArg.java | 0 .../beforeCollectionsAddAllArray.java | 0 .../beforeCollectionsAddAllPrimitive.java | 0 .../beforeCollectionsAddAllVarArg.java | 0 .../beforeCollectionsAddAllWrongLimit.java | 0 .../{ => continue}/afterContinue.java | 0 .../{ => continue}/afterContinueNegate.java | 0 .../afterContinueNegateFloat.java | 0 .../{ => continue}/afterContinueNested.java | 0 .../afterContinueNestedElse.java | 0 .../{ => continue}/afterContinueOr.java | 0 .../{ => continue}/beforeContinue.java | 0 .../{ => continue}/beforeContinueInside.java | 0 .../{ => continue}/beforeContinueNegate.java | 0 .../beforeContinueNegateFloat.java | 0 .../{ => continue}/beforeContinueNested.java | 0 .../beforeContinueNestedElse.java | 0 .../beforeContinueNestedLabel.java | 0 .../{ => continue}/beforeContinueOr.java | 0 .../{ => count}/afterCountArray.java | 0 .../{ => count}/afterCountInner.java | 0 .../{ => count}/afterCountOuter.java | 0 .../{ => count}/afterCountPrimitiveArray.java | 0 .../{ => count}/beforeCountArray.java | 0 .../{ => count}/beforeCountInner.java | 0 .../{ => count}/beforeCountOuter.java | 0 .../beforeCountPrimitiveArray.java | 0 .../{ => count}/beforeCountShortArray.java | 0 .../{ => distinct}/afterDistinctCollect.java | 0 .../afterDistinctCollectLimit.java | 0 .../{ => distinct}/beforeDistinctCollect.java | 0 .../beforeDistinctCollectLimit.java | 0 .../beforeDistinctCollectWrongItem.java | 0 .../afterCollectionDependencyInFilter.java | 0 .../afterCollectionDependencyInFilter1.java | 0 .../afterCollectionDependencyInFilter2.java | 0 .../afterCollectionDependencyInFilter3.java | 0 .../afterCollectionDependencyInFilter4.java | 0 ...lterFlatMapCollectionFilterMapCollect.java | 0 .../afterFilterFlatMapMapFilterCollect.java | 0 .../afterFilterMapFlatMapArrayCollect.java | 0 .../afterFilterMapFlatMapArrayMapCollect.java | 0 .../{ => filter}/afterFilterMapForEach.java | 0 .../{ => filter}/afterFilterNoBraces.java | 0 .../afterNormalNestedFilters.java | 0 .../beforeCollectionDependencyInFilter.java | 0 .../beforeCollectionDependencyInFilter1.java | 0 .../beforeCollectionDependencyInFilter2.java | 0 .../beforeCollectionDependencyInFilter3.java | 0 .../beforeCollectionDependencyInFilter4.java | 0 ...lterFlatMapCollectionFilterMapCollect.java | 0 .../beforeFilterFlatMapMapFilterCollect.java | 0 .../beforeFilterMapFlatMapArrayCollect.java | 0 ...beforeFilterMapFlatMapArrayMapCollect.java | 0 .../{ => filter}/beforeFilterMapForEach.java | 0 .../{ => filter}/beforeFilterNoBraces.java | 0 .../beforeNormalNestedFilters.java | 0 .../{ => findFirst}/afterFindFirst.java | 0 .../{ => findFirst}/afterFindFirstArray.java | 0 .../afterFindFirstAssignment.java | 0 .../afterFindFirstAssignmentCast.java | 0 .../afterFindFirstAssignmentIntermediate.java | 0 .../afterFindFirstAssignmentInterrupted.java | 0 .../afterFindFirstAssignmentPrimitive.java | 0 ...dFirstAssignmentUsedInSameDeclaration.java | 0 .../afterFindFirstAssignmentWithLabel.java | 0 .../afterFindFirstBoolean.java | 0 .../{ => findFirst}/afterFindFirstCast.java | 0 .../{ => findFirst}/afterFindFirstEnum.java | 0 .../{ => findFirst}/afterFindFirstField.java | 0 .../afterFindFirstIfPresent.java | 0 .../afterFindFirstIfPresentWithReturn.java | 0 .../afterFindFirstOptional.java | 0 .../afterFindFirstOptionalFlatMap.java | 0 .../afterFindFirstOptionalType.java | 0 .../afterFindFirstOuterIf.java | 0 .../afterFindFirstPrimitive.java | 0 .../afterFindFirstReAssignment.java | 0 .../{ => findFirst}/afterFindFirstReturn.java | 0 .../afterFindFirstReturnUnreachable.java | 0 .../afterFindFirstRunnableTernary.java | 0 .../afterFindFirstStaticField.java | 0 .../afterFindFirstTernary.java | 0 .../afterFindFirstValueReused.java | 0 .../{ => findFirst}/beforeFindFirst.java | 0 .../{ => findFirst}/beforeFindFirstArray.java | 0 .../beforeFindFirstAssignment.java | 0 .../beforeFindFirstAssignmentCast.java | 0 ...beforeFindFirstAssignmentIntermediate.java | 0 .../beforeFindFirstAssignmentInterrupted.java | 0 .../beforeFindFirstAssignmentNested.java | 0 .../beforeFindFirstAssignmentPrimitive.java | 0 ...beforeFindFirstAssignmentPrimitiveMap.java | 0 ...dFirstAssignmentUsedInSameDeclaration.java | 0 .../beforeFindFirstAssignmentWithLabel.java | 0 .../beforeFindFirstBoolean.java | 0 .../{ => findFirst}/beforeFindFirstCall.java | 0 .../{ => findFirst}/beforeFindFirstCast.java | 0 .../{ => findFirst}/beforeFindFirstEnum.java | 0 .../{ => findFirst}/beforeFindFirstField.java | 0 .../beforeFindFirstFieldOther.java | 0 .../beforeFindFirstIfPresent.java | 0 ...beforeFindFirstIfPresentTwoStatements.java | 0 .../beforeFindFirstIfPresentWithReturn.java | 0 .../beforeFindFirstOptional.java | 0 .../beforeFindFirstOptionalFlatMap.java | 0 .../beforeFindFirstOptionalType.java | 0 .../beforeFindFirstOuterIf.java | 0 .../beforeFindFirstPrimitive.java | 0 .../beforeFindFirstPrimitiveNonTrivial.java | 0 .../beforeFindFirstReAssignment.java | 0 .../beforeFindFirstReturn.java | 0 .../beforeFindFirstReturnUnreachable.java | 0 .../beforeFindFirstRunnableTernary.java | 0 .../beforeFindFirstStaticField.java | 0 .../beforeFindFirstTernary.java | 0 .../beforeFindFirstUsedInBound.java | 0 .../beforeFindFirstValueReused.java | 0 .../afterFlatMapChangePrimitiveType.java | 0 .../{ => flatMap}/afterFlatMapForLoop.java | 0 .../{ => flatMap}/afterFlatten2DArray.java | 0 .../afterFlatten2DArrayPrimitive.java | 0 .../beforeFlatMapChangePrimitiveType.java | 0 .../{ => flatMap}/beforeFlatMapForLoop.java | 0 .../{ => flatMap}/beforeFlatten2DArray.java | 0 .../beforeFlatten2DArrayPrimitive.java | 0 .../{ => foreach}/afterForEachCast.java | 0 .../{ => foreach}/afterForeachMethodRef.java | 0 .../{ => foreach}/beforeForEachCast.java | 0 .../{ => foreach}/beforeForeachMethodRef.java | 0 .../{ => limit}/afterLimitCollect.java | 0 .../afterLimitCollectAddedOps.java | 0 .../afterLimitCollectInNestedLoop.java | 0 .../{ => limit}/afterLimitCount.java | 0 .../{ => limit}/afterLimitCountGreater.java | 0 .../{ => limit}/afterLimitCountPostfix.java | 0 .../{ => limit}/afterLimitCountPrefix.java | 0 .../{ => limit}/afterLimitFind.java | 0 .../{ => limit}/afterLimitIntermediate.java | 0 .../{ => limit}/afterRangeLimited.java | 0 .../{ => limit}/beforeLimitCollect.java | 0 .../beforeLimitCollectAddedOps.java | 0 .../beforeLimitCollectInNestedLoop.java | 0 .../beforeLimitCollectInOuterLoop.java | 0 .../{ => limit}/beforeLimitCollectSet.java | 0 .../beforeLimitCollectWrongCollection.java | 0 .../{ => limit}/beforeLimitCount.java | 0 .../{ => limit}/beforeLimitCountGreater.java | 0 .../{ => limit}/beforeLimitCountPostfix.java | 0 .../{ => limit}/beforeLimitCountPrefix.java | 0 .../{ => limit}/beforeLimitCountRef.java | 0 .../{ => limit}/beforeLimitFind.java | 0 .../{ => limit}/beforeLimitIntermediate.java | 0 .../{ => limit}/beforeRangeLimited.java | 0 .../minMax/afterMaxComparable.java | 34 + .../minMax/afterMaxComparableMaxAsArg.java | 41 + .../minMax/afterMaxComparator.java | 36 + .../minMax/afterMaxPrimitive.java | 9 + .../minMax/afterMaxPrimitiveNegated.java | 9 + .../minMax/afterMaxReference1.java | 32 + .../minMax/afterMaxReference2.java | 34 + .../minMax/afterMaxReference3.java | 34 + .../minMax/afterMaxReferenceField.java | 34 + .../minMax/afterMaxReferenceTmp.java | 34 + .../minMax/afterMaxReferenceTmpParens.java | 34 + .../afterMinInitialValueWithoutFilter.java | 9 + .../minMax/afterMinPrimitive.java | 9 + .../minMax/afterMinPrimitiveMap.java | 9 + .../afterMinPrimitiveNonTrivialSelector.java | 9 + .../minMax/afterMinReference.java | 34 + ...rMinReferenceInitializerNotJustBefore.java | 33 + .../minMax/beforeMaxComparable.java | 41 + .../minMax/beforeMaxComparableMaxAsArg.java | 41 + .../minMax/beforeMaxComparator.java | 42 + .../minMax/beforeMaxPrimitive.java | 16 + .../minMax/beforeMaxPrimitiveNegated.java | 13 + ...beforeMaxPrimitiveNonCycleComparision.java | 17 + .../beforeMaxPrimitiveNonCycleVariable.java | 17 + .../minMax/beforeMaxReference1.java | 39 + .../minMax/beforeMaxReference2.java | 44 ++ .../minMax/beforeMaxReference3.java | 41 + .../minMax/beforeMaxReference4.java | 41 + .../minMax/beforeMaxReferenceField.java | 41 + .../minMax/beforeMaxReferenceShortMethod.java | 41 + .../minMax/beforeMaxReferenceTmp.java | 43 + .../minMax/beforeMaxReferenceTmpParens.java | 43 + .../beforeMinInitialValueWithoutFilter.java | 16 + .../minMax/beforeMinPrimitive.java | 16 + .../minMax/beforeMinPrimitiveMap.java | 16 + .../beforeMinPrimitiveNonTrivialSelector.java | 14 + .../minMax/beforeMinReference.java | 41 + ...eMinReferenceInitializerNotJustBefore.java | 39 + .../{ => noneMatch}/afterNoneMatch.java | 0 .../afterNoneMatchContinue.java | 0 .../{ => noneMatch}/beforeNoneMatch.java | 0 .../beforeNoneMatchContinue.java | 0 .../{ => other}/afterCastExpected.java | 0 .../{ => other}/afterCastInIterValue.java | 0 .../afterCompactFilterToMethodReference.java | 0 .../afterComputeIfAbsentChained.java | 0 .../afterComputeIfAbsentSimple.java | 0 .../{ => other}/afterDisableForArrays.java | 0 .../{ => other}/afterExplicitArray.java | 0 .../{ => other}/afterForLoop.java | 0 .../{ => other}/afterForLoopBoxed.java | 0 .../{ => other}/afterForLoopShortBound.java | 0 .../{ => other}/afterFromAsList.java | 0 .../{ => other}/afterFromEmptyList.java | 0 .../{ => other}/afterIncompleteNewCall.java | 0 .../{ => other}/afterMethodRef.java | 0 .../{ => other}/afterMissedBraces.java | 0 .../{ => other}/afterNormal.java | 0 .../{ => other}/afterNormalComments.java | 0 .../{ => other}/afterNormalNoBraces.java | 0 .../{ => other}/afterPrimitive.java | 0 .../{ => other}/afterPrimitiveArray.java | 0 .../{ => other}/afterTooLazyCalculation.java | 0 .../{ => other}/beforeBreakInside.java | 0 .../{ => other}/beforeCastExpected.java | 0 .../{ => other}/beforeCastInIterValue.java | 0 .../beforeCompactFilterToMethodReference.java | 0 .../beforeComputeIfAbsentChained.java | 0 .../beforeComputeIfAbsentSimple.java | 0 .../{ => other}/beforeDisableForArrays.java | 0 .../{ => other}/beforeExceptionIsThrown.java | 0 .../{ => other}/beforeExplicitArray.java | 0 .../{ => other}/beforeForLoop.java | 0 .../{ => other}/beforeForLoopBoxed.java | 0 .../{ => other}/beforeForLoopFloatBound.java | 0 .../{ => other}/beforeForLoopShortBound.java | 0 .../{ => other}/beforeForLoopUpdated.java | 0 .../{ => other}/beforeForLoopWrongBound.java | 0 .../beforeForLoopWrongIncrement.java | 0 .../beforeForLoopWrongInitializer.java | 0 .../{ => other}/beforeFromAsList.java | 0 .../{ => other}/beforeFromEmptyList.java | 0 .../{ => other}/beforeIfIncomplete.java | 0 .../{ => other}/beforeIncompleteLabel.java | 0 .../{ => other}/beforeIncompleteNewCall.java | 0 .../{ => other}/beforeIterable.java | 0 ...InitializedAndThusNotEffectivelyFinal.java | 0 .../{ => other}/beforeMethodRef.java | 0 .../{ => other}/beforeMissedBraces.java | 0 .../{ => other}/beforeNoFilter.java | 0 .../{ => other}/beforeNormal.java | 0 .../{ => other}/beforeNormalComments.java | 0 .../{ => other}/beforeNormalNoBraces.java | 0 .../beforeNotEffectivelyFinalVar.java | 0 .../{ => other}/beforePrimitive.java | 0 .../{ => other}/beforePrimitiveArray.java | 0 .../beforePrimitiveArrayWrongType.java | 0 .../{ => other}/beforeRangeReassigned.java | 0 .../beforeRangeReassignedNested.java | 0 .../{ => other}/beforeRawCollection.java | 0 .../beforeRawCollectionSubstitution.java | 0 .../{ => other}/beforeReturnInside.java | 0 .../{ => other}/beforeThrownCollect.java | 0 .../beforeThrownExceptionsNotMatched.java | 0 .../{ => other}/beforeTooLazyCalculation.java | 0 .../{ => reduce}/afterAnd.java | 0 .../{ => reduce}/afterAndHighestBit.java | 0 .../afterAndReplacingHexInitializer.java | 0 .../afterAndReplacingInitializer.java | 0 .../afterAndReplacingLongInitializer.java | 0 .../{ => reduce}/afterConjunction.java | 0 .../{ => reduce}/afterConjunctionBoxed.java | 0 .../{ => reduce}/afterDisjunction.java | 0 .../{ => reduce}/afterMultiply.java | 0 .../afterMultiplyComplexInitializer.java | 0 .../afterMultiplyConflictingVariable.java | 0 ...afterMultiplyNarrowingTypeInitializer.java | 0 .../afterMultiplyNotOneInitializer.java | 0 .../afterMultiplyWithMapping.java | 0 .../{ => reduce}/afterOr.java | 0 .../{ => reduce}/afterXor.java | 0 .../{ => reduce}/afterXorLong.java | 0 .../{ => reduce}/beforeAnd.java | 0 .../{ => reduce}/beforeAndHighestBit.java | 0 .../beforeAndReplacingHexInitializer.java | 0 .../beforeAndReplacingInitializer.java | 0 .../beforeAndReplacingLongInitializer.java | 0 .../{ => reduce}/beforeConjunction.java | 0 .../{ => reduce}/beforeConjunctionBoxed.java | 0 .../{ => reduce}/beforeDisjunction.java | 0 .../{ => reduce}/beforeMultiply.java | 0 .../beforeMultiplyComplexInitializer.java | 0 .../beforeMultiplyConflictingVariable.java | 0 ...eforeMultiplyNarrowingTypeInitializer.java | 0 .../beforeMultiplyNotOneInitializer.java | 0 .../beforeMultiplyWithMapping.java | 0 .../{ => reduce}/beforeOr.java | 0 .../{ => reduce}/beforeXor.java | 0 .../{ => reduce}/beforeXorLong.java | 0 .../{ => sorted}/afterSortedToArray.java | 0 .../{ => sorted}/beforeSortedToArray.java | 0 .../{ => sum}/afterIntArraySum.java | 0 .../{ => sum}/afterIntFilterSum.java | 0 .../{ => sum}/afterIntSum.java | 0 .../{ => sum}/afterIntegerSum.java | 0 .../{ => sum}/afterSumArrayLength.java | 0 .../{ => sum}/afterSumArrayLengthNested.java | 0 .../{ => sum}/afterSumCollection.java | 0 .../{ => sum}/afterSumInterruptedUnused.java | 0 .../{ => sum}/afterSumInterruptedUsed.java | 0 .../{ => sum}/afterSumNarrowing.java | 0 .../{ => sum}/afterSumNarrowingParens.java | 0 .../{ => sum}/afterSumPrimitive.java | 0 .../{ => sum}/afterSumPromotion.java | 0 .../{ => sum}/beforeFloatSum.java | 0 .../{ => sum}/beforeIntArraySum.java | 0 .../{ => sum}/beforeIntFilterSum.java | 0 .../{ => sum}/beforeIntSum.java | 0 .../{ => sum}/beforeIntegerSum.java | 0 .../{ => sum}/beforeSumAccessOuterFor.java | 0 .../{ => sum}/beforeSumArrayLength.java | 0 .../{ => sum}/beforeSumArrayLengthFloat.java | 0 .../{ => sum}/beforeSumArrayLengthNested.java | 0 .../{ => sum}/beforeSumCollection.java | 0 .../{ => sum}/beforeSumInterruptedUnused.java | 0 .../{ => sum}/beforeSumInterruptedUsed.java | 0 .../{ => sum}/beforeSumNarrowing.java | 0 .../{ => sum}/beforeSumNarrowingParens.java | 0 .../{ => sum}/beforeSumPrimitive.java | 0 .../{ => sum}/beforeSumPromotion.java | 0 .../{ => takeWhile}/afterTakeWhileJava9.java | 0 .../{ => takeWhile}/beforeTakeWhile.java | 0 .../{ => takeWhile}/beforeTakeWhileJava9.java | 0 .../{ => toArray}/afterToArray.java | 0 .../{ => toArray}/afterToArrayAssignment.java | 0 .../{ => toArray}/afterToArrayCounted.java | 0 .../afterToArrayCountedBoxed.java | 0 .../afterToArrayCountedLength2D.java | 0 .../afterToArrayCountedLengthGeneric.java | 0 .../afterToArrayDeclaration.java | 0 .../{ => toArray}/afterToArrayGeneric.java | 0 .../{ => toArray}/afterToArrayHashSet.java | 0 .../afterToArrayLinkedHashSet.java | 0 .../afterToArrayReusedCollection.java | 0 .../{ => toArray}/afterToArraySorted.java | 0 .../{ => toArray}/afterToArrayTreeSet.java | 0 .../afterToArrayTwoDimensional.java | 0 .../{ => toArray}/beforeToArray.java | 0 .../beforeToArrayAssignment.java | 0 .../{ => toArray}/beforeToArrayCounted.java | 0 .../beforeToArrayCountedBoxed.java | 0 .../beforeToArrayCountedLength2D.java | 0 .../beforeToArrayCountedLengthGeneric.java | 0 .../beforeToArrayDeclaration.java | 0 ...eforeToArrayDeclarationCollectionUsed.java | 0 .../{ => toArray}/beforeToArrayGeneric.java | 0 .../{ => toArray}/beforeToArrayHashSet.java | 0 .../beforeToArrayIdentityHashSet.java | 0 .../beforeToArrayLinkedHashSet.java | 0 .../beforeToArrayReusedCollection.java | 0 .../{ => toArray}/beforeToArraySorted.java | 0 .../{ => toArray}/beforeToArrayTreeSet.java | 0 .../beforeToArrayTwoDimensional.java | 0 .../{ => toArray}/beforeToArrayWrongSize.java | 0 .../StreamApiMigrationInspectionTest.java | 53 +- .../AllMatchStreamApiMigrationTest.java | 27 + .../AnyMatchStreamApiMigrationTest.java | 27 + .../BufferedReaderStreamApiMigrationTest.java | 27 + .../CollectStreamApiMigrationTest.java | 27 + .../CollectionsStreamApiMigrationTest.java | 27 + .../ContinueStreamApiMigrationTest.java | 27 + .../DistinctStreamApiMigrationTest.java | 27 + .../streams/FilterStreamApiMigrationTest.java | 27 + .../FindFirstStreamApiMigrationTest.java | 27 + .../FlatMapFirstStreamApiMigrationTest.java | 27 + .../ForeachFirstStreamApiMigrationTest.java | 27 + .../streams/LimitStreamApiMigrationTest.java | 27 + .../streams/MinMaxStreamApiMigrationTest.java | 27 + .../NoneMatchStreamApiMigrationTest.java | 27 + .../streams/OtherStreamApiMigrationTest.java | 27 + ...uctionOperationStreamApiMigrationTest.java | 27 + ...SortedOperationStreamApiMigrationTest.java | 27 + .../StreamApiMigrationInspectionBaseTest.java | 51 ++ .../SumOperationStreamApiMigrationTest.java | 27 + ...eWhileOperationStreamApiMigrationTest.java | 27 + ...oArrayOperationStreamApiMigrationTest.java | 27 + .../siyeh/ig/psiutils/ExpressionUtils.java | 1 + 580 files changed, 2484 insertions(+), 27 deletions(-) create mode 100644 java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => allMatch}/afterAllMatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => allMatch}/afterAllMatchChain.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => allMatch}/afterAllMatchContinue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => allMatch}/afterAllMatchMethodRef.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => allMatch}/beforeAllMatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => allMatch}/beforeAllMatchChain.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => allMatch}/beforeAllMatchContinue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => allMatch}/beforeAllMatchMethodRef.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchArrayAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchAssignmentBoolean.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchAssignmentBooleanInverted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchAssignmentExtraCode.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchAssignmentNonTrivial.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchAssignmentNonTrivialUnassigned.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchAssignmentTryCatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchAssignmentTryCatch2.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchChain.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchCompoundAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchCustomReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchEnclosingIf.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchEnclosingIfBlock.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchEnclosingIfInterrupted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchExtends.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchMethodCall.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchUnreachableReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterAnyMatchVoid.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/afterNestedAnyMatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchArrayAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchAssignmentBoolean.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchAssignmentBooleanInverted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchAssignmentExtraCode.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchAssignmentNonTrivial.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchAssignmentNonTrivialUnassigned.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchAssignmentTryCatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchAssignmentTryCatch2.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchChain.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchCompoundAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchCustomReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchEnclosingIf.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchEnclosingIfBlock.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchEnclosingIfInterrupted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchExtends.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchFloat.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchMethodCall.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchNonFinal.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchReferNonFinal.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchReturnDifferent.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchReturnInterrupted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchUnreachableReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchUsesVar.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeAnyMatchVoid.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeNestedAnyMatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => anyMatch}/beforeNestedAnyMatchFailed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => bufferedReader}/afterBufferedReaderModifiedLine.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => bufferedReader}/afterBufferedReaderSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => bufferedReader}/beforeBufferedReaderComplexModifiedLine.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => bufferedReader}/beforeBufferedReaderModifiedLine.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => bufferedReader}/beforeBufferedReaderSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => bufferedReader}/beforeBufferedReaderSumLineReused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterAddPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterArrayFilterCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterArrayListVariableType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterBufferedReaderCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterBufferedReaderCollectNestedOk.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectAnonymous.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectArrayList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectArrayListAndFilter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectArrayListCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectArrayListComment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectArrayListCompoundDeclaration.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectArrayListLambda.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectArrayListNonTrivialInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectCast.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectContravariant.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectCustomConstructor.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectGuava.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectGuavaMap.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectGuavaSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectHashSetFieldInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectInterrupted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectInterruptedInLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectInterruptedUpdated.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectInterruptedUsed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectLambda.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectLinkedHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectListSuperType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectNewList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectNewListArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectNewListArrayInCall.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectNewTreeSetArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectNulls.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectSelfCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectSetParameter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectSorted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectSortedNatural.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectSupertype.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectToMap.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectToMapPut.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectToMapPutIfAbsent.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectToObj.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterCollectWithSameLambda.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterGroupingByArrayList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterGroupingByCustomCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterGroupingByDownstream.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterGroupingBySimple.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoining.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoiningAssign.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoiningConcat.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoiningDelimited.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoiningInBrackets.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoiningInitialValue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoiningReused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoiningStringBuilderReused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterJoiningUsingIndex.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/afterWildcardCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeAddPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeArrayFilterCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeArrayListVariableType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeBufferedReaderCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeBufferedReaderCollectNested.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeBufferedReaderCollectNestedOk.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectAnonymous.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectArrayList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectArrayListAndFilter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectArrayListCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectArrayListComment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectArrayListCompoundDeclaration.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectArrayListLambda.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectArrayListNonTrivialInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectCast.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectContravariant.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectCustomConstructor.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectGuava.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectGuavaMap.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectGuavaNonEmpty.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectGuavaSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectHashSetFieldInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectIdentityMap.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectInterrupted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectInterruptedInLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectInterruptedUpdated.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectInterruptedUsed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectInterruptedUsedFinal.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectLambda.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectLinkedHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectListSuperType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectNewList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectNewListArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectNewListArrayInCall.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectNewTreeSetArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectNulls.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectQualifierDependsOnLoopParameter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectSelfCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectSetParameter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectSorted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectSortedNatural.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectSupertype.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectToMap.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectToMapPut.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectToMapPutIfAbsent.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectToMapPutInvalid.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectToObj.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectWithAnonymous.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectWithLambda.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeCollectWithSameLambda.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeGroupingByArrayList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeGroupingByCustomCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeGroupingByDownstream.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeGroupingBySimple.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoining.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningAssign.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningConcat.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningDelimited.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningDelimitedWrongBuilder.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningInBrackets.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningInitialValue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningReused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningStringBuilderReused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeJoiningUsingIndex.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collect}/beforeWildcardCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collections}/afterCollectionsAddAllArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collections}/afterCollectionsAddAllPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collections}/afterCollectionsAddAllVarArg.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collections}/beforeCollectionsAddAllArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collections}/beforeCollectionsAddAllPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collections}/beforeCollectionsAddAllVarArg.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => collections}/beforeCollectionsAddAllWrongLimit.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/afterContinue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/afterContinueNegate.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/afterContinueNegateFloat.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/afterContinueNested.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/afterContinueNestedElse.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/afterContinueOr.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/beforeContinue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/beforeContinueInside.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/beforeContinueNegate.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/beforeContinueNegateFloat.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/beforeContinueNested.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/beforeContinueNestedElse.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/beforeContinueNestedLabel.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => continue}/beforeContinueOr.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/afterCountArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/afterCountInner.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/afterCountOuter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/afterCountPrimitiveArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/beforeCountArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/beforeCountInner.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/beforeCountOuter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/beforeCountPrimitiveArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => count}/beforeCountShortArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => distinct}/afterDistinctCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => distinct}/afterDistinctCollectLimit.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => distinct}/beforeDistinctCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => distinct}/beforeDistinctCollectLimit.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => distinct}/beforeDistinctCollectWrongItem.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterCollectionDependencyInFilter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterCollectionDependencyInFilter1.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterCollectionDependencyInFilter2.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterCollectionDependencyInFilter3.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterCollectionDependencyInFilter4.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterFilterFlatMapCollectionFilterMapCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterFilterFlatMapMapFilterCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterFilterMapFlatMapArrayCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterFilterMapFlatMapArrayMapCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterFilterMapForEach.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterFilterNoBraces.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/afterNormalNestedFilters.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeCollectionDependencyInFilter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeCollectionDependencyInFilter1.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeCollectionDependencyInFilter2.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeCollectionDependencyInFilter3.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeCollectionDependencyInFilter4.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeFilterFlatMapCollectionFilterMapCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeFilterFlatMapMapFilterCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeFilterMapFlatMapArrayCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeFilterMapFlatMapArrayMapCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeFilterMapForEach.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeFilterNoBraces.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => filter}/beforeNormalNestedFilters.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirst.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstAssignmentCast.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstAssignmentIntermediate.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstAssignmentInterrupted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstAssignmentPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstAssignmentUsedInSameDeclaration.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstAssignmentWithLabel.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstBoolean.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstCast.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstEnum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstField.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstIfPresent.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstIfPresentWithReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstOptional.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstOptionalFlatMap.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstOptionalType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstOuterIf.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstReAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstReturnUnreachable.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstRunnableTernary.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstStaticField.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstTernary.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/afterFindFirstValueReused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirst.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignmentCast.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignmentIntermediate.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignmentInterrupted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignmentNested.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignmentPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignmentPrimitiveMap.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignmentUsedInSameDeclaration.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstAssignmentWithLabel.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstBoolean.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstCall.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstCast.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstEnum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstField.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstFieldOther.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstIfPresent.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstIfPresentTwoStatements.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstIfPresentWithReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstOptional.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstOptionalFlatMap.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstOptionalType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstOuterIf.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstPrimitiveNonTrivial.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstReAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstReturn.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstReturnUnreachable.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstRunnableTernary.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstStaticField.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstTernary.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstUsedInBound.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => findFirst}/beforeFindFirstValueReused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => flatMap}/afterFlatMapChangePrimitiveType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => flatMap}/afterFlatMapForLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => flatMap}/afterFlatten2DArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => flatMap}/afterFlatten2DArrayPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => flatMap}/beforeFlatMapChangePrimitiveType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => flatMap}/beforeFlatMapForLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => flatMap}/beforeFlatten2DArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => flatMap}/beforeFlatten2DArrayPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => foreach}/afterForEachCast.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => foreach}/afterForeachMethodRef.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => foreach}/beforeForEachCast.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => foreach}/beforeForeachMethodRef.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitCollectAddedOps.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitCollectInNestedLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitCount.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitCountGreater.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitCountPostfix.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitCountPrefix.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitFind.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterLimitIntermediate.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/afterRangeLimited.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCollectAddedOps.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCollectInNestedLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCollectInOuterLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCollectSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCollectWrongCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCount.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCountGreater.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCountPostfix.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCountPrefix.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitCountRef.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitFind.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeLimitIntermediate.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => limit}/beforeRangeLimited.java (100%) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparable.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparableMaxAsArg.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparator.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitiveNegated.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference1.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference2.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference3.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceField.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmp.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmpParens.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinInitialValueWithoutFilter.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitive.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveMap.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveNonTrivialSelector.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReference.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReferenceInitializerNotJustBefore.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparable.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparableMaxAsArg.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparator.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitive.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNegated.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleComparision.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleVariable.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference1.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference2.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference3.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference4.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceField.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceShortMethod.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceTmp.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceTmpParens.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinInitialValueWithoutFilter.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitive.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveMap.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveNonTrivialSelector.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReference.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReferenceInitializerNotJustBefore.java rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => noneMatch}/afterNoneMatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => noneMatch}/afterNoneMatchContinue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => noneMatch}/beforeNoneMatch.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => noneMatch}/beforeNoneMatchContinue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterCastExpected.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterCastInIterValue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterCompactFilterToMethodReference.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterComputeIfAbsentChained.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterComputeIfAbsentSimple.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterDisableForArrays.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterExplicitArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterForLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterForLoopBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterForLoopShortBound.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterFromAsList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterFromEmptyList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterIncompleteNewCall.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterMethodRef.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterMissedBraces.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterNormal.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterNormalComments.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterNormalNoBraces.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterPrimitiveArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/afterTooLazyCalculation.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeBreakInside.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeCastExpected.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeCastInIterValue.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeCompactFilterToMethodReference.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeComputeIfAbsentChained.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeComputeIfAbsentSimple.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeDisableForArrays.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeExceptionIsThrown.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeExplicitArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeForLoop.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeForLoopBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeForLoopFloatBound.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeForLoopShortBound.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeForLoopUpdated.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeForLoopWrongBound.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeForLoopWrongIncrement.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeForLoopWrongInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeFromAsList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeFromEmptyList.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeIfIncomplete.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeIncompleteLabel.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeIncompleteNewCall.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeIterable.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeMayBeNotInitializedAndThusNotEffectivelyFinal.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeMethodRef.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeMissedBraces.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeNoFilter.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeNormal.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeNormalComments.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeNormalNoBraces.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeNotEffectivelyFinalVar.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforePrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforePrimitiveArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforePrimitiveArrayWrongType.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeRangeReassigned.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeRangeReassignedNested.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeRawCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeRawCollectionSubstitution.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeReturnInside.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeThrownCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeThrownExceptionsNotMatched.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => other}/beforeTooLazyCalculation.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterAnd.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterAndHighestBit.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterAndReplacingHexInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterAndReplacingInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterAndReplacingLongInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterConjunction.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterConjunctionBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterDisjunction.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterMultiply.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterMultiplyComplexInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterMultiplyConflictingVariable.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterMultiplyNarrowingTypeInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterMultiplyNotOneInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterMultiplyWithMapping.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterOr.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterXor.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/afterXorLong.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeAnd.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeAndHighestBit.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeAndReplacingHexInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeAndReplacingInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeAndReplacingLongInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeConjunction.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeConjunctionBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeDisjunction.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeMultiply.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeMultiplyComplexInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeMultiplyConflictingVariable.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeMultiplyNarrowingTypeInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeMultiplyNotOneInitializer.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeMultiplyWithMapping.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeOr.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeXor.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => reduce}/beforeXorLong.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sorted}/afterSortedToArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sorted}/beforeSortedToArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterIntArraySum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterIntFilterSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterIntSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterIntegerSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumArrayLength.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumArrayLengthNested.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumInterruptedUnused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumInterruptedUsed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumNarrowing.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumNarrowingParens.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/afterSumPromotion.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeFloatSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeIntArraySum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeIntFilterSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeIntSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeIntegerSum.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumAccessOuterFor.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumArrayLength.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumArrayLengthFloat.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumArrayLengthNested.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumInterruptedUnused.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumInterruptedUsed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumNarrowing.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumNarrowingParens.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => sum}/beforeSumPromotion.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => takeWhile}/afterTakeWhileJava9.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => takeWhile}/beforeTakeWhile.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => takeWhile}/beforeTakeWhileJava9.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayCounted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayCountedBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayCountedLength2D.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayCountedLengthGeneric.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayDeclaration.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayGeneric.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayLinkedHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayReusedCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArraySorted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayTreeSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/afterToArrayTwoDimensional.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayCounted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayCountedBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayCountedLength2D.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayCountedLengthGeneric.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayDeclaration.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayDeclarationCollectionUsed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayGeneric.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayIdentityHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayLinkedHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayReusedCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArraySorted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayTreeSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayTwoDimensional.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{ => toArray}/beforeToArrayWrongSize.java (100%) create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AllMatchStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AnyMatchStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/BufferedReaderStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectionsStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ContinueStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/DistinctStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FilterStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FindFirstStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FlatMapFirstStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ForeachFirstStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/LimitStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/MinMaxStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/NoneMatchStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/OtherStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ReductionOperationStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SortedOperationStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/StreamApiMigrationInspectionBaseTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SumOperationStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/TakeWhileOperationStreamApiMigrationTest.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ToArrayOperationStreamApiMigrationTest.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java index ac53283837a6..46cba24a9d6b 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java @@ -22,6 +22,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.siyeh.ig.psiutils.ControlFlowUtils; import com.siyeh.ig.psiutils.ControlFlowUtils.InitializerUsageStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author Tagir Valeev @@ -87,6 +88,20 @@ abstract class BaseStreamApiMigration { } } + + @Nullable + static PsiElement replaceWithFindExtremum(@NotNull PsiLoopStatement loopStatement, + @NotNull PsiVariable extremumHolder, + @NotNull String streamText, + @Nullable PsiVariable keyExtremum) { + restoreComments(loopStatement, loopStatement.getBody()); + if(keyExtremum != null) { + keyExtremum.delete(); + } + InitializerUsageStatus status = ControlFlowUtils.getInitializerUsageStatus(extremumHolder, loopStatement); + return replaceInitializer(loopStatement, extremumHolder, extremumHolder.getInitializer(), streamText, status); + } + static void restoreComments(PsiLoopStatement loopStatement, PsiStatement body) { final PsiElement parent = loopStatement.getParent(); for (PsiElement comment : PsiTreeUtil.findChildrenOfType(body, PsiComment.class)) { diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java new file mode 100644 index 000000000000..5053535682eb --- /dev/null +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -0,0 +1,741 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.codeInspection.streamMigration; + + +import com.intellij.openapi.project.Project; +import com.intellij.psi.*; +import com.intellij.psi.search.LocalSearchScope; +import com.intellij.psi.search.searches.ReferencesSearch; +import com.intellij.psi.tree.IElementType; +import com.intellij.psi.util.InheritanceUtil; +import com.siyeh.ig.psiutils.ControlFlowUtils; +import com.siyeh.ig.psiutils.EquivalenceChecker; +import com.siyeh.ig.psiutils.ExpressionUtils; +import com.siyeh.ig.psiutils.VariableAccessUtils; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +import static com.intellij.psi.util.PsiUtil.skipParenthesizedExprDown; +import static com.intellij.util.ObjectUtils.tryCast; + +class FindExtremumMigration extends BaseStreamApiMigration { + + private static final String MAX_OP = "max"; + private static final String MIN_OP = "min"; + private static final EquivalenceChecker ourEquivalence = EquivalenceChecker.getCanonicalPsiEquivalence(); + + protected FindExtremumMigration(boolean shouldWarn, String replacement) { + super(shouldWarn, replacement); + } + + @Override + PsiElement migrate(@NotNull Project project, @NotNull PsiStatement body, @NotNull TerminalBlock tb) { + ExtremumTerminal terminal = extract(tb, null); + if (terminal == null) return null; + return terminal.replace(); + } + + @Contract(pure = true) + @NotNull + static String getOperation(boolean isMax) { + return isMax ? MAX_OP : MIN_OP; + } + + @Nullable + static private String getComparingMethod(@NotNull PsiType type) { + if (type.equals(PsiType.INT)) return "comparingInt"; + if (type.equals(PsiType.DOUBLE)) return "comparingDouble"; + if (type.equals(PsiType.LONG)) return "comparingLong"; + if (InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_LANG_COMPARABLE)) return "comparing"; + return null; + } + + @Nullable + static private Object getNonFilterableInitialValue(@NotNull PsiType type, boolean isMax) { + if (type.equals(PsiType.INT)) { + return isMax ? Integer.MIN_VALUE : Integer.MAX_VALUE; + } + else if (type.equals(PsiType.LONG)) { + return isMax ? Long.MIN_VALUE : Long.MAX_VALUE; + } + return null; + } + + /** + * @param nonFinalVariables list of non final variables used in terminal block. If null checks are omitted (intended to be null when + * quick fix applied), empty array means that no non final variables are present in block and have different semantics + */ + @Nullable + static ExtremumTerminal extract(@NotNull TerminalBlock terminalBlock, @Nullable List nonFinalVariables) { + PsiStatement[] statements = terminalBlock.getStatements(); + StreamApiMigrationInspection.FilterOp filterOp = terminalBlock.getLastOperation(StreamApiMigrationInspection.FilterOp.class); + if (filterOp != null) { + TerminalBlock block = terminalBlock.withoutLastOperation(); + if (block != null) { + boolean negated = filterOp.isNegated(); + PsiExpression condition = filterOp.getExpression(); + ExtremumTerminal simpleRefCase = extractRefCase(condition, statements, block, + (nullCheckExpr, comparisonExpr, statements1, terminalBlock1, nonFinalVars, isNegated) -> SimpleRefExtremumTerminal + .extract(nullCheckExpr, comparisonExpr, statements1, terminalBlock1, + nonFinalVars), + nonFinalVariables, negated); + if (simpleRefCase != null) return simpleRefCase; + ExtremumTerminal primitiveCase = PrimitiveExtremumTerminal.extract(condition, statements, block, nonFinalVariables, negated); + if (primitiveCase != null) return primitiveCase; + ExtremumTerminal complexRefCase = extractRefCase(condition, statements, block, ComplexExtremumTerminal::extract, nonFinalVariables, + negated); + if (complexRefCase != null) return complexRefCase; + } + } + return extractIfElseCase(statements, terminalBlock, nonFinalVariables); + } + + //if(maxPerson == null) { + // maxPerson = current; + //} else if (maxPerson.getAge() < person.getAge()) { + // maxPerson = current; + //} + @Nullable + static private ExtremumTerminal extractIfElseCase(@NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock, + @Nullable List nonFinalVariables) { + if (statements.length != 1) return null; + PsiStatement statement = statements[0]; + PsiIfStatement ifStatement = tryCast(statement, PsiIfStatement.class); + if (ifStatement == null) return null; + PsiExpression thenCondition = ifStatement.getCondition(); + if (thenCondition == null) return null; + PsiStatement thenBranch = ControlFlowUtils.stripBraces(ifStatement.getThenBranch()); + PsiStatement elseBranch = ControlFlowUtils.stripBraces(ifStatement.getElseBranch()); + if (thenBranch == null || elseBranch == null) return null; + return extractIfElseCase(thenBranch, thenCondition, elseBranch, terminalBlock, nonFinalVariables); + } + + @Nullable + static private ExtremumTerminal extractIfElseCase(@NotNull PsiStatement thenBranch, + @NotNull PsiExpression thenCondition, + @NotNull PsiStatement elseBranch, + @NotNull TerminalBlock terminalBlock, + @Nullable List nonFinalVariables) { + PsiIfStatement elseIfStatement = tryCast(elseBranch, PsiIfStatement.class); + if (elseIfStatement == null || elseIfStatement.getElseBranch() != null) return null; + PsiExpression elseIfCondition = elseIfStatement.getCondition(); + PsiStatement elseIf = ControlFlowUtils.stripBraces(elseIfStatement.getThenBranch()); + if (elseIf == null || elseIfCondition == null) return null; + ExtremumTerminal firstWay = + extractIfElseCase(thenBranch, thenCondition, elseIf, elseIfCondition, terminalBlock, nonFinalVariables); + if (firstWay != null) return firstWay; + return extractIfElseCase(elseIf, elseIfCondition, thenBranch, thenCondition, terminalBlock, nonFinalVariables); + } + + @Nullable + static private ExtremumTerminal extractIfElseCase(@NotNull PsiStatement nullCheckBranch, + @NotNull PsiExpression nullCheckExpr, + @NotNull PsiStatement comparisonBranch, + @NotNull PsiExpression comparisonExpr, + @NotNull TerminalBlock terminalBlock, + @Nullable List nonFinalVariables) { + if (!ourEquivalence.statementsAreEquivalent(nullCheckBranch, comparisonBranch)) return null; + return SimpleRefExtremumTerminal + .extract(nullCheckExpr, comparisonExpr, new PsiStatement[]{comparisonBranch}, terminalBlock, nonFinalVariables); + } + + @Nullable + static private ExtremumTerminal extractRefCase(@NotNull PsiExpression condition, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock, + @NotNull Extractor extractor, + @Nullable List nonFinalVariables, + boolean isNegated) { + PsiBinaryExpression binaryExpression = tryCast(condition, PsiBinaryExpression.class); + if (binaryExpression == null) return null; + IElementType sign = binaryExpression.getOperationTokenType(); + PsiExpression lOperand = binaryExpression.getLOperand(); + PsiExpression rOperand = binaryExpression.getROperand(); + if (!sign.equals(JavaTokenType.OROR) || rOperand == null) return null; + return extractor.extractOriented(lOperand, rOperand, statements, terminalBlock, nonFinalVariables, isNegated); + } + + + static private boolean containsAnyVariable(@NotNull PsiExpression expression, @NotNull List variables) { + for (PsiVariable variable : variables) { + if (VariableAccessUtils.variableIsUsed(variable, expression)) return true; + } + return false; + } + + static private boolean mayChangeBeforeLoop(@NotNull PsiVariable variable, + @NotNull TerminalBlock terminalBlock) { + ControlFlowUtils.InitializerUsageStatus status = + ControlFlowUtils.getInitializerUsageStatus(variable, terminalBlock.getMainLoop()); + return status.equals(ControlFlowUtils.InitializerUsageStatus.UNKNOWN); + } + + @Nullable + static PsiVariable resolveVariableReference(@Nullable PsiExpression expression) { + PsiExpression nakedExpression = skipParenthesizedExprDown(expression); + PsiReferenceExpression referenceExpression = tryCast(nakedExpression, PsiReferenceExpression.class); + if (referenceExpression == null) return null; + PsiLocalVariable localVariable = tryCast(referenceExpression.resolve(), PsiLocalVariable.class); + if (localVariable != null) return localVariable; + return tryCast(referenceExpression.resolve(), PsiParameter.class); + } + + private static boolean equalShape(@NotNull PsiExpression first, + @NotNull PsiExpression second, + @NotNull String firstExprVarName, + @NotNull PsiVariable secondExprVariable) { + PsiExpression secondCopy = (PsiExpression)second.copy(); + for (PsiReference ref : ReferencesSearch.search(secondExprVariable, new LocalSearchScope(secondCopy))) { + if (ref instanceof PsiReferenceExpression) ExpressionUtils.bindReferenceTo((PsiReferenceExpression)ref, firstExprVarName); + } + return ourEquivalence.expressionsAreEquivalent(first, secondCopy); + } + + private static boolean hasKnownComparableType(@NotNull Comparison comparison, @Nullable PsiType type) { + if (!comparison.isExternalComparison()) { + if (type == null || !(type.equals(PsiType.INT) || + type.equals(PsiType.LONG) || + type.equals(PsiType.DOUBLE) || + InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_LANG_COMPARABLE))) { + return false; + } + } + return true; + } + + interface ExtremumTerminal { + @Nullable + PsiElement replace(); + + boolean isMax(); + } + + @FunctionalInterface + interface Extractor { + @Nullable + ExtremumTerminal extractOriented(@NotNull PsiExpression nullCheckExpr, + @NotNull PsiExpression comparisonExpr, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock, + @Nullable List nonFinalVars, + boolean isNegated); + } + + //Person maxPerson = null; + //int maxAge = 0; + //for (Person person : personList) { + // if (maxPerson == null || maxAge < person.getAge()) { + // maxPerson = person; + // maxAge = person.getAge(); + // } + //} + private static class ComplexExtremumTerminal implements ExtremumTerminal { + private final boolean myMax; + private final @NotNull PsiVariable myExtremum; + private final @NotNull PsiVariable myExtremumKey; + private final @NotNull PsiExpression myExtremumKeyInitializer; + private final @NotNull PsiExpression myExtremumKeyExpr; + private final @NotNull TerminalBlock myTerminalBlock; + + private ComplexExtremumTerminal(boolean max, + @NotNull PsiVariable extremum, + @NotNull PsiVariable extremumKey, + @NotNull PsiExpression extremumKeyInitializer, + @NotNull PsiExpression extremumKeyExpr, + @NotNull TerminalBlock block) { + myMax = max; + myExtremum = extremum; + myExtremumKey = extremumKey; + myExtremumKeyInitializer = extremumKeyInitializer; + myExtremumKeyExpr = extremumKeyExpr; + myTerminalBlock = block; + } + + + @Nullable + @Override + public PsiElement replace() { + PsiType loopVarExpressionType = myExtremumKeyExpr.getType(); + if (loopVarExpressionType == null) return null; + String method = getComparingMethod(loopVarExpressionType); + if (method == null) return null; + + String inFilterOperation = myMax ? ">=" : "<="; + PsiLoopStatement loop = myTerminalBlock.getMainLoop(); + PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(loop.getProject()); + String extremumInitializer = myExtremumKeyInitializer.getText(); + String name = myTerminalBlock.getVariable().getName(); + if (name == null) return null; + PsiExpression condition = + elementFactory.createExpressionFromText(myExtremumKeyExpr.getText() + inFilterOperation + extremumInitializer, loop); + TerminalBlock blockWithFilter = + myTerminalBlock.add(new StreamApiMigrationInspection.FilterOp(condition, myTerminalBlock.getVariable(), false)); + + String lambdaText = LambdaUtil.createLambda(myTerminalBlock.getVariable(), myExtremumKeyExpr); + String comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + method + "(" + lambdaText + ")"; + String stream = blockWithFilter.generate() + "." + getOperation(myMax) + "(" + comparator + ").orElse(null)"; + return replaceWithFindExtremum(myTerminalBlock.getMainLoop(), myExtremum, stream, myExtremumKey); + } + + @Override + public boolean isMax() { + return myMax; + } + + @Nullable + private static ComplexExtremumTerminal extract(@NotNull PsiExpression nullCheckExpr, + @NotNull PsiExpression comparisonExpr, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock, + @Nullable List nonFinalVariables, + boolean isNegated) { + Comparison comparison = Comparison.extract(comparisonExpr, terminalBlock.getVariable(), isNegated); + if (comparison == null) return null; + + PsiBinaryExpression nullCheckBinary = tryCast(skipParenthesizedExprDown(nullCheckExpr), PsiBinaryExpression.class); + if (nullCheckBinary == null) return null; + PsiVariable extremumNullChecked = ExpressionUtils.getVariableFromNullComparison(nullCheckBinary, true); + + if (extremumNullChecked == null) return null; + ComplexAssignment assignment = ComplexAssignment.extract(statements, extremumNullChecked); + if (assignment == null) return null; + if (!assignment.getLoopVar().equals(terminalBlock.getVariable())) return null; + PsiVariable extremumKey = resolveVariableReference(comparison.getExtremumExpr()); + if (extremumKey == null) return null; + if (!extremumKey.equals(assignment.getExtremumKey())) return null; + PsiVariable extremum = assignment.getExtremum(); + if (mayChangeBeforeLoop(extremumKey, terminalBlock) || + mayChangeBeforeLoop(extremum, terminalBlock)) { + return null; + } + + PsiExpression loopVarExpr = comparison.getLoopVarExpr(); + if (!ourEquivalence.expressionsAreEquivalent(assignment.getLoopVarExpression(), loopVarExpr)) return null; + if (nonFinalVariables != null) { + if (containsAnyVariable(assignment.getLoopVarExpression(), nonFinalVariables)) return null; + } + PsiType loopVarExprType = loopVarExpr.getType(); + if (!hasKnownComparableType(comparison, loopVarExprType)) return null; + + PsiExpression extremumInitializer = extremum.getInitializer(); + PsiExpression extremumKeyInitializer = extremumKey.getInitializer(); + if (extremumInitializer == null || extremumKeyInitializer == null) return null; + if (!ExpressionUtils.isNullLiteral(extremumInitializer)) return null; + if (!ExpressionUtils.isEvaluatedAtCompileTime(extremumKeyInitializer)) return null; + return new ComplexExtremumTerminal(comparison.isMax(), extremum, extremumKey, extremumKeyInitializer, loopVarExpr, terminalBlock + ); + } + + private static class ComplexAssignment { + private @NotNull final PsiVariable myExtremum; + private @NotNull final PsiVariable myExtremumKey; + private @NotNull final PsiVariable myLoopVar; // extremum = loopVar; + private @NotNull final PsiExpression myLoopVarExpression; + + private ComplexAssignment(@NotNull PsiVariable extremum, + @NotNull PsiVariable extremumKey, + @NotNull PsiVariable loopVar, + @NotNull PsiExpression loopVarExpression) { + myExtremum = extremum; + myExtremumKey = extremumKey; + myLoopVar = loopVar; + myLoopVarExpression = loopVarExpression; + } + + @NotNull + public PsiVariable getExtremum() { + return myExtremum; + } + + @NotNull + public PsiVariable getExtremumKey() { + return myExtremumKey; + } + + @NotNull + public PsiVariable getLoopVar() { + return myLoopVar; + } + + @NotNull + public PsiExpression getLoopVarExpression() { + return myLoopVarExpression; + } + + /** + * Intended to recognize: + * extremum = loopVar; // max = current; + * extremumKey = loopVarExpr; // maxAge = current.getAge(); + * + * @param statements statements that contains only complex assignment + * @param nullCheckedExtremum extremum that will be used to recognize extremum assignment + */ + @Nullable + private static ComplexAssignment extract(@NotNull PsiStatement[] statements, @NotNull PsiVariable nullCheckedExtremum) { + if (statements.length != 2) return null; + PsiStatement first = statements[0]; + PsiStatement second = statements[1]; + ComplexAssignment assignment = extract(first, second, nullCheckedExtremum); + if (assignment != null) return assignment; + return extract(second, first, nullCheckedExtremum); + } + + @Nullable + private static ComplexAssignment extract(@NotNull PsiStatement first, + @NotNull PsiStatement second, + @NotNull PsiVariable nullCheckedExtremum) { + PsiAssignmentExpression secondAssignment = ExpressionUtils.getAssignment(second); + if (secondAssignment == null) return null; + PsiVariable loopVar = resolveVariableReference(ExpressionUtils.getAssignmentTo(first, nullCheckedExtremum)); + PsiVariable extremumKey = resolveVariableReference(secondAssignment.getLExpression()); + PsiExpression loopVarExpr = secondAssignment.getRExpression(); + if (extremumKey == null || loopVar == null || loopVarExpr == null) return null; + return new ComplexAssignment(nullCheckedExtremum, extremumKey, loopVar, loopVarExpr); + } + } + } + + //if(max < anInt) { + //max = anInt; + //} + private static class PrimitiveExtremumTerminal implements ExtremumTerminal { + private final boolean myMax; + private final @NotNull TerminalBlock myTerminalBlock; + private final @NotNull PsiExpression myLoopVarExpression; + private final @NotNull PsiVariable myExtremum; + private final @NotNull PsiExpression myExtremumInitializer; + + private PrimitiveExtremumTerminal(boolean max, + @NotNull TerminalBlock block, + @NotNull PsiExpression loopVarExpression, + @NotNull PsiVariable extremum, + @NotNull PsiExpression extremumInitializer) { + myMax = max; + myTerminalBlock = block; + myLoopVarExpression = loopVarExpression; + myExtremum = extremum; + myExtremumInitializer = extremumInitializer; + } + + + @Nullable + @Override + public PsiElement replace() { + String name = myTerminalBlock.getVariable().getName(); + if (name == null) return null; + PsiType type = myExtremumInitializer.getType(); + if (type == null) return null; + Object initializerValue = ExpressionUtils.computeConstantExpression(myExtremumInitializer); + if (initializerValue == null) return null; + + TerminalBlock blockWithMap = myTerminalBlock + .add(new StreamApiMigrationInspection.MapOp(myLoopVarExpression, myTerminalBlock.getVariable(), myLoopVarExpression.getType())); + + String inFilterOperation = myMax ? ">=" : "<="; + PsiLoopStatement loop = blockWithMap.getMainLoop(); + PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(loop.getProject()); + String extremumInitializer = myExtremumInitializer.getText(); + Object nonFilterableInitialValue = getNonFilterableInitialValue(type, myMax); + final TerminalBlock terminalBlock; + if (nonFilterableInitialValue != null && !nonFilterableInitialValue.equals(initializerValue)) { + PsiExpression condition = + elementFactory.createExpressionFromText(name + inFilterOperation + extremumInitializer, loop); + + terminalBlock = blockWithMap.add(new StreamApiMigrationInspection.FilterOp(condition, myTerminalBlock.getVariable(), false)); + } + else { + terminalBlock = blockWithMap; + } + + + String stream = terminalBlock.generate() + "." + getOperation(myMax) + "().orElse(" + extremumInitializer + ")"; + return replaceWithFindExtremum(loop, myExtremum, stream, null); + } + + + @Override + public boolean isMax() { + return myMax; + } + + + @Nullable + private static PrimitiveExtremumTerminal extract(@NotNull PsiExpression condition, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock, + @Nullable List nonFinalVariables, + boolean isNegated) { + Comparison comparison = Comparison.extract(condition, terminalBlock.getVariable(), isNegated); + if (comparison == null) return null; + if (statements.length != 1) return null; + PsiAssignmentExpression assignment = ExpressionUtils.getAssignment(statements[0]); + if (assignment == null) return null; + PsiVariable extremum = resolveVariableReference(assignment.getLExpression()); + if (extremum == null) return null; + PsiExpression assignmentLoopVarExpr = assignment.getRExpression(); + PsiExpression comparisonLoopVarExpr = comparison.getLoopVarExpr(); + if (!ourEquivalence.expressionsAreEquivalent(assignmentLoopVarExpr, comparisonLoopVarExpr)) return null; + PsiVariable comparisonExtremum = resolveVariableReference(comparison.getExtremumExpr()); + if (comparisonExtremum == null) return null; + if (!extremum.equals(comparisonExtremum)) return null; + if (mayChangeBeforeLoop(extremum, terminalBlock)) return null; + if (nonFinalVariables != null) { + if (containsAnyVariable(comparisonLoopVarExpr, nonFinalVariables)) return null; + } + PsiType loopVarExprType = comparisonLoopVarExpr.getType(); + if (!hasKnownComparableType(comparison, loopVarExprType)) return null; + + PsiExpression extremumInitializer = extremum.getInitializer(); + if (!ExpressionUtils.isEvaluatedAtCompileTime(extremumInitializer)) return null; + return new PrimitiveExtremumTerminal(comparison.isMax(), terminalBlock, comparisonLoopVarExpr, extremum, extremumInitializer + ); + } + } + + private static class SimpleRefExtremumTerminal implements ExtremumTerminal { + private final boolean myMax; + private final @NotNull TerminalBlock myTerminalBlock; + private final @NotNull PsiExpression myLoopVarExpression; + private final @NotNull PsiVariable myExtremum; + private final @Nullable PsiVariable myComparator; + + private SimpleRefExtremumTerminal(boolean max, + @NotNull TerminalBlock block, + @NotNull PsiExpression loopVarExpression, + @NotNull PsiVariable extremum, + @Nullable PsiVariable comparator) { + myMax = max; + myTerminalBlock = block; + myLoopVarExpression = loopVarExpression; + myExtremum = extremum; + myComparator = comparator; + } + + @Nullable + @Override + public PsiElement replace() { + PsiType loopVarExpressionType = myLoopVarExpression.getType(); + if (loopVarExpressionType == null) return null; + final String comparator; + if(myComparator == null) { + String method = getComparingMethod(loopVarExpressionType); + if (method == null) return null; + String lambdaText = LambdaUtil.createLambda(myTerminalBlock.getVariable(), myLoopVarExpression); + comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + method + "(" + lambdaText + ")"; + } else { + String comparatorName = myComparator.getName(); + if(comparatorName == null) return null; + comparator = comparatorName; + } + String stream = myTerminalBlock.generate() + "." + getOperation(myMax) + "(" + comparator + ").orElse(null)"; + return replaceWithFindExtremum(myTerminalBlock.getMainLoop(), myExtremum, stream, null); + } + + @Override + public boolean isMax() { + return myMax; + } + + + @Nullable + private static SimpleRefExtremumTerminal extract(@NotNull PsiExpression nullCheckExpr, + @NotNull PsiExpression comparisonExpr, + @NotNull PsiStatement[] statements, + @NotNull TerminalBlock terminalBlock, + @Nullable List nonFinalVars) { + PsiBinaryExpression nullCheckBinary = tryCast(nullCheckExpr, PsiBinaryExpression.class); + if (nullCheckBinary == null) return null; + PsiVariable nullCheckingVar = ExpressionUtils.getVariableFromNullComparison(nullCheckBinary, true); + if (nullCheckingVar == null) return null; + Comparison comparison = Comparison.extract(comparisonExpr, terminalBlock.getVariable(), false); + if (comparison == null) return null; + if (statements.length != 1) return null; + PsiAssignmentExpression assignment = ExpressionUtils.getAssignment(statements[0]); + if (assignment == null) return null; + PsiVariable extremum = resolveVariableReference(assignment.getLExpression()); + PsiVariable loopVariable = resolveVariableReference(assignment.getRExpression()); + if (extremum == null || loopVariable == null) return null; + if (nullCheckingVar != extremum) return null; + if (!loopVariable.equals(terminalBlock.getVariable())) return null; + + PsiExpression extremumExpr = comparison.getExtremumExpr(); + PsiExpression loopVarExpr = comparison.getLoopVarExpr(); + String name = extremum.getName(); + if (name == null) return null; + if (!equalShape(extremumExpr, loopVarExpr, name, terminalBlock.getVariable())) return null; + if (mayChangeBeforeLoop(extremum, terminalBlock)) return null; + if (nonFinalVars != null) { + if (nonFinalVars.size() != 1) return null; + if (!nonFinalVars.get(0).equals(extremum)) return null; + if (containsAnyVariable(loopVarExpr, nonFinalVars)) return null; + } + PsiType loopVarExprType = loopVarExpr.getType(); + if (!hasKnownComparableType(comparison, loopVarExprType)) return null; + + boolean max = comparison.isMax(); + + PsiExpression initializer = extremum.getInitializer(); + if (!ExpressionUtils.isNullLiteral(initializer)) return null; + return new SimpleRefExtremumTerminal(max, terminalBlock, loopVarExpr, extremum, comparison.getComparator()); + } + } + + private static class Comparison { + private final @NotNull PsiExpression myExtremumExpr; + private final @NotNull PsiExpression myLoopVarExpr; + private final boolean myIsMax; + private final @Nullable PsiVariable myComparator; + private final boolean myExternalComparison; + + private Comparison(@NotNull PsiExpression extremumExpr, + @NotNull PsiExpression loopVarExpr, + boolean max, + @Nullable PsiVariable comparator, + boolean externalComparison) { + myExtremumExpr = extremumExpr; + myLoopVarExpr = loopVarExpr; + myIsMax = max; + myComparator = comparator; + myExternalComparison = externalComparison; + } + + @NotNull + public PsiExpression getLoopVarExpr() { + return myLoopVarExpr; + } + + @NotNull + public PsiExpression getExtremumExpr() { + return myExtremumExpr; + } + + public boolean isMax() { + return myIsMax; + } + + @Nullable + public PsiVariable getComparator() { + return myComparator; + } + + public boolean isExternalComparison() { + return myExternalComparison; + } + + + @Nullable + static Comparison extract(@NotNull PsiExpression expression, @NotNull PsiVariable loopVariable, boolean isNegated) { + PsiBinaryExpression binaryExpression = tryCast(skipParenthesizedExprDown(expression), PsiBinaryExpression.class); + if (binaryExpression == null) return null; + IElementType sign = binaryExpression.getOperationSign().getTokenType(); + PsiExpression rOperand = binaryExpression.getROperand(); + if (rOperand == null) return null; + PsiExpression lOperand = binaryExpression.getLOperand(); + if (sign.equals(JavaTokenType.LT) || sign.equals(JavaTokenType.LE)) { + Comparison extract = extractComparatorLikeComparison(lOperand, rOperand, loopVariable, isNegated); + if (extract != null) return extract; + return extract(lOperand, rOperand, loopVariable, isNegated, null, false); + } + else if (sign.equals(JavaTokenType.GT) || sign.equals(JavaTokenType.GE)) { + Comparison extract = extractComparatorLikeComparison(lOperand, rOperand, loopVariable, !isNegated); + if (extract != null) return extract; + return extract(lOperand, rOperand, loopVariable, !isNegated, null, false); + } + return null; + } + + @Nullable + private static Comparison extractComparatorLikeComparison(@NotNull PsiExpression expression, + @NotNull PsiVariable loopVariable, + boolean isGreater) { + + PsiMethodCallExpression methodExpression = tryCast(expression, PsiMethodCallExpression.class); + if (methodExpression == null) return null; + PsiExpression qualifierExpression = methodExpression.getMethodExpression().getQualifierExpression(); + if (qualifierExpression == null) return null; + PsiMethod method = methodExpression.resolveMethod(); + if (method == null) return null; + String methodName = method.getName(); + PsiType qualifierType = qualifierExpression.getType(); + PsiExpressionList argumentList = methodExpression.getArgumentList(); + PsiExpression[] arguments = argumentList.getExpressions(); + if (arguments.length == 1) { + PsiExpression argument = arguments[0]; + + if (!methodName.equals("compareTo") || !InheritanceUtil.isInheritor(qualifierType, CommonClassNames.JAVA_LANG_COMPARABLE)) { + return null; + } + return extract(argument, qualifierExpression, loopVariable, isGreater, null, false); + } + else if (arguments.length == 2) { + PsiExpression firstArgument = arguments[0]; + PsiExpression secondArgument = arguments[1]; + if (!methodName.equals("compare") || !InheritanceUtil.isInheritor(qualifierType, CommonClassNames.JAVA_UTIL_COMPARATOR)) { + return null; + } + PsiVariable comparator = resolveVariableReference(qualifierExpression); + return extract(secondArgument, firstArgument, loopVariable, isGreater, comparator, true); + } + return null; + } + + @Nullable + private static Comparison extractComparatorLikeComparison(@NotNull PsiExpression lOperand, + @NotNull PsiExpression rOperand, + @NotNull PsiVariable loopVariable, + boolean isGreater) { + if (ExpressionUtils.isZero(lOperand)) { + return extractComparatorLikeComparison(rOperand, loopVariable, isGreater); + } + else if (ExpressionUtils.isZero(rOperand)) { + return extractComparatorLikeComparison(lOperand, loopVariable, !isGreater); + } + return null; + } + + + @Nullable + private static Comparison extract(@NotNull PsiExpression lOperand, + @NotNull PsiExpression rOperand, + @NotNull PsiVariable loopVariable, + boolean isGreater, + @Nullable PsiVariable comparator, + boolean externalComparison) { + final boolean max; + final PsiExpression extremumExpr; + final PsiExpression loopVarExpr; + if (ReferencesSearch.search(loopVariable, new LocalSearchScope(lOperand)).findFirst() != null) { + max = isGreater; + loopVarExpr = lOperand; + extremumExpr = rOperand; + } + else if (ReferencesSearch.search(loopVariable, new LocalSearchScope(rOperand)).findFirst() != null) { + max = !isGreater; + loopVarExpr = rOperand; + extremumExpr = lOperand; + } + else { + return null; + } + return new Comparison(extremumExpr, loopVarExpr, max, comparator, externalComparison); + } + } +} \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/OperationReductionMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/OperationReductionMigration.java index 878a28ae96ba..01034b4c4592 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/OperationReductionMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/OperationReductionMigration.java @@ -66,7 +66,7 @@ public class OperationReductionMigration extends BaseStreamApiMigration { PsiExpression initializer = var.getInitializer(); String identity = initializer != null && myReductionOperation.getInitializerExpressionRestriction().test(initializer) ? initializer.getText() - : myReductionOperation.myIdentity; + : myReductionOperation.getIdentity(); String stream = tb.add(new StreamApiMigrationInspection.MapOp(operand, tb.getVariable(), type)).generate() + String.format(Locale.ENGLISH, ".reduce(%s, (%s, %s) -> %s %s %s)", identity, leftOperand, rightOperand, leftOperand, diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java index c953acc8b324..f1477e2a5abe 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java @@ -493,6 +493,10 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo if (getAccumulatedVariable(tb, nonFinalVariables, SUM_OPERATION) != null) { return new SumMigration(true); } + FindExtremumMigration.ExtremumTerminal extremumTerminal = FindExtremumMigration.extract(tb, nonFinalVariables); + if(extremumTerminal != null) { + return new FindExtremumMigration(true, FindExtremumMigration.getOperation(extremumTerminal.isMax()) + "()"); + } for (OperationReductionMigration.ReductionOperation reductionOperation : OperationReductionMigration.OPERATIONS) { if (getAccumulatedVariable(tb, nonFinalVariables, reductionOperation) != null) { return new OperationReductionMigration(true, reductionOperation); diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/TerminalBlock.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/TerminalBlock.java index 4deaada7d342..b374178faaae 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/TerminalBlock.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/TerminalBlock.java @@ -375,6 +375,14 @@ class TerminalBlock { return myOperations[myOperations.length-1]; } + @Nullable + TerminalBlock withoutLastOperation() { + if(myOperations.length == 1) return null; + Operation[] operations = new Operation[myOperations.length - 1]; + System.arraycopy(myOperations, 0, operations, 0, operations.length); + return new TerminalBlock(operations, operations[operations.length - 1].getVariable(), myStatements); + } + @Nullable T getLastOperation(Class clazz) { return tryCast(getLastOperation(), clazz); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllMatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/afterAllMatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllMatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/afterAllMatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllMatchChain.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/afterAllMatchChain.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllMatchChain.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/afterAllMatchChain.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllMatchContinue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/afterAllMatchContinue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllMatchContinue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/afterAllMatchContinue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllMatchMethodRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/afterAllMatchMethodRef.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllMatchMethodRef.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/afterAllMatchMethodRef.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAllMatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/beforeAllMatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAllMatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/beforeAllMatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAllMatchChain.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/beforeAllMatchChain.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAllMatchChain.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/beforeAllMatchChain.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAllMatchContinue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/beforeAllMatchContinue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAllMatchContinue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/beforeAllMatchContinue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAllMatchMethodRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/beforeAllMatchMethodRef.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAllMatchMethodRef.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/allMatch/beforeAllMatchMethodRef.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchArrayAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchArrayAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchArrayAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchArrayAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentBoolean.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentBoolean.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentBoolean.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentBoolean.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentBooleanInverted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentBooleanInverted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentBooleanInverted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentBooleanInverted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentExtraCode.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentExtraCode.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentExtraCode.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentExtraCode.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentNonTrivial.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentNonTrivial.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentNonTrivial.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentNonTrivial.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentNonTrivialUnassigned.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentNonTrivialUnassigned.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentNonTrivialUnassigned.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentNonTrivialUnassigned.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentTryCatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentTryCatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentTryCatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentTryCatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentTryCatch2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentTryCatch2.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchAssignmentTryCatch2.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchAssignmentTryCatch2.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchChain.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchChain.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchChain.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchChain.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchCompoundAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchCompoundAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchCompoundAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchCompoundAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchCustomReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchCustomReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchCustomReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchCustomReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchEnclosingIf.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchEnclosingIf.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchEnclosingIf.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchEnclosingIf.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchEnclosingIfBlock.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchEnclosingIfBlock.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchEnclosingIfBlock.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchEnclosingIfBlock.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchEnclosingIfInterrupted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchEnclosingIfInterrupted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchEnclosingIfInterrupted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchEnclosingIfInterrupted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchExtends.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchExtends.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchExtends.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchExtends.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchMethodCall.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchMethodCall.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchMethodCall.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchUnreachableReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchUnreachableReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchUnreachableReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchUnreachableReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchVoid.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchVoid.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnyMatchVoid.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterAnyMatchVoid.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNestedAnyMatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterNestedAnyMatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNestedAnyMatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/afterNestedAnyMatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchArrayAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchArrayAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchArrayAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchArrayAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentBoolean.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentBoolean.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentBoolean.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentBoolean.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentBooleanInverted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentBooleanInverted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentBooleanInverted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentBooleanInverted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentExtraCode.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentExtraCode.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentExtraCode.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentExtraCode.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentNonTrivial.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentNonTrivial.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentNonTrivial.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentNonTrivial.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentNonTrivialUnassigned.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentNonTrivialUnassigned.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentNonTrivialUnassigned.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentNonTrivialUnassigned.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentTryCatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentTryCatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentTryCatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentTryCatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentTryCatch2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentTryCatch2.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchAssignmentTryCatch2.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchAssignmentTryCatch2.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchChain.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchChain.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchChain.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchChain.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchCompoundAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchCompoundAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchCompoundAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchCompoundAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchCustomReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchCustomReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchCustomReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchCustomReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchEnclosingIf.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchEnclosingIf.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchEnclosingIf.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchEnclosingIf.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchEnclosingIfBlock.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchEnclosingIfBlock.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchEnclosingIfBlock.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchEnclosingIfBlock.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchEnclosingIfInterrupted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchEnclosingIfInterrupted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchEnclosingIfInterrupted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchEnclosingIfInterrupted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchExtends.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchExtends.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchExtends.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchExtends.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchFloat.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchFloat.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchFloat.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchFloat.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchMethodCall.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchMethodCall.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchMethodCall.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchNonFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchNonFinal.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchNonFinal.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchNonFinal.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchReferNonFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchReferNonFinal.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchReferNonFinal.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchReferNonFinal.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchReturnDifferent.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchReturnDifferent.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchReturnDifferent.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchReturnDifferent.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchReturnInterrupted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchReturnInterrupted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchReturnInterrupted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchReturnInterrupted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchUnreachableReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchUnreachableReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchUnreachableReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchUnreachableReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchUsesVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchUsesVar.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchUsesVar.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchUsesVar.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchVoid.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchVoid.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnyMatchVoid.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeAnyMatchVoid.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNestedAnyMatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeNestedAnyMatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNestedAnyMatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeNestedAnyMatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNestedAnyMatchFailed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeNestedAnyMatchFailed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNestedAnyMatchFailed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/anyMatch/beforeNestedAnyMatchFailed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterBufferedReaderModifiedLine.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/afterBufferedReaderModifiedLine.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterBufferedReaderModifiedLine.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/afterBufferedReaderModifiedLine.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterBufferedReaderSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/afterBufferedReaderSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterBufferedReaderSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/afterBufferedReaderSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderComplexModifiedLine.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderComplexModifiedLine.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderComplexModifiedLine.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderComplexModifiedLine.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderModifiedLine.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderModifiedLine.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderModifiedLine.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderModifiedLine.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderSumLineReused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderSumLineReused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderSumLineReused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderSumLineReused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAddPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterAddPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAddPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterAddPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterArrayFilterCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterArrayFilterCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterArrayFilterCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterArrayFilterCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterArrayListVariableType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterArrayListVariableType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterArrayListVariableType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterArrayListVariableType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterBufferedReaderCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterBufferedReaderCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterBufferedReaderCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterBufferedReaderCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterBufferedReaderCollectNestedOk.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterBufferedReaderCollectNestedOk.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterBufferedReaderCollectNestedOk.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterBufferedReaderCollectNestedOk.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectAnonymous.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectAnonymous.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectAnonymous.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectAnonymous.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListAndFilter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListAndFilter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListAndFilter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListAndFilter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListComment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListComment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListComment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListComment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListCompoundDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListCompoundDeclaration.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListCompoundDeclaration.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListCompoundDeclaration.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListLambda.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListLambda.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListLambda.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListNonTrivialInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListNonTrivialInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectArrayListNonTrivialInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectArrayListNonTrivialInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectCast.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectCast.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectCast.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectContravariant.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectContravariant.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectContravariant.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectContravariant.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectCustomConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectCustomConstructor.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectCustomConstructor.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectCustomConstructor.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectGuava.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectGuava.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectGuava.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectGuava.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectGuavaMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectGuavaMap.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectGuavaMap.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectGuavaMap.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectGuavaSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectGuavaSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectGuavaSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectGuavaSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectHashSetFieldInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectHashSetFieldInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectHashSetFieldInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectHashSetFieldInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectInterrupted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectInterrupted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectInterrupted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectInterrupted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectInterruptedInLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectInterruptedInLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectInterruptedInLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectInterruptedInLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectInterruptedUpdated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectInterruptedUpdated.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectInterruptedUpdated.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectInterruptedUpdated.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectInterruptedUsed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectInterruptedUsed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectInterruptedUsed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectInterruptedUsed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectLambda.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectLambda.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectLambda.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectLinkedHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectLinkedHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectLinkedHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectLinkedHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectListSuperType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectListSuperType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectListSuperType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectListSuperType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNewList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNewList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNewList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNewList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNewListArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNewListArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNewListArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNewListArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNewListArrayInCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNewListArrayInCall.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNewListArrayInCall.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNewListArrayInCall.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNewTreeSetArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNewTreeSetArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNewTreeSetArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNewTreeSetArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNulls.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNulls.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectNulls.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectNulls.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSelfCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSelfCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSelfCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSelfCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSetParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSetParameter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSetParameter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSetParameter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSorted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSorted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSorted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSorted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSortedNatural.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSortedNatural.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSortedNatural.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSortedNatural.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSupertype.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSupertype.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectSupertype.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectSupertype.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectToMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectToMap.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectToMap.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectToMap.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectToMapPut.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectToMapPut.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectToMapPut.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectToMapPut.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectToMapPutIfAbsent.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectToMapPutIfAbsent.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectToMapPutIfAbsent.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectToMapPutIfAbsent.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectToObj.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectToObj.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectToObj.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectToObj.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectWithSameLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectWithSameLambda.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectWithSameLambda.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterCollectWithSameLambda.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterGroupingByArrayList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingByArrayList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterGroupingByArrayList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingByArrayList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterGroupingByCustomCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingByCustomCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterGroupingByCustomCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingByCustomCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterGroupingByDownstream.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingByDownstream.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterGroupingByDownstream.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingByDownstream.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterGroupingBySimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingBySimple.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterGroupingBySimple.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterGroupingBySimple.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoining.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoining.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoining.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoining.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningAssign.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningAssign.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningAssign.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningAssign.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningConcat.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningConcat.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningConcat.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningConcat.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningDelimited.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningDelimited.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningDelimited.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningDelimited.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningInBrackets.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningInBrackets.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningInBrackets.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningInBrackets.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningInitialValue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningInitialValue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningInitialValue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningInitialValue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningReused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningReused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningReused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningReused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningStringBuilderReused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningStringBuilderReused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningStringBuilderReused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningStringBuilderReused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningUsingIndex.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningUsingIndex.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterJoiningUsingIndex.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterJoiningUsingIndex.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterWildcardCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterWildcardCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterWildcardCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterWildcardCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAddPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeAddPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAddPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeAddPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeArrayFilterCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeArrayFilterCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeArrayFilterCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeArrayFilterCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeArrayListVariableType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeArrayListVariableType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeArrayListVariableType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeArrayListVariableType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderCollectNested.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollectNested.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderCollectNested.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollectNested.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderCollectNestedOk.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollectNestedOk.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBufferedReaderCollectNestedOk.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollectNestedOk.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectAnonymous.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectAnonymous.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectAnonymous.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectAnonymous.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListAndFilter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListAndFilter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListAndFilter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListAndFilter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListComment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListComment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListComment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListComment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListCompoundDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListCompoundDeclaration.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListCompoundDeclaration.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListCompoundDeclaration.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListLambda.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListLambda.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListLambda.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListNonTrivialInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListNonTrivialInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectArrayListNonTrivialInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectArrayListNonTrivialInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectCast.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectCast.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectCast.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectContravariant.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectContravariant.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectContravariant.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectContravariant.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectCustomConstructor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectCustomConstructor.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectCustomConstructor.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectCustomConstructor.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectGuava.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectGuava.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectGuava.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectGuava.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectGuavaMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectGuavaMap.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectGuavaMap.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectGuavaMap.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectGuavaNonEmpty.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectGuavaNonEmpty.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectGuavaNonEmpty.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectGuavaNonEmpty.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectGuavaSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectGuavaSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectGuavaSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectGuavaSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectHashSetFieldInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectHashSetFieldInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectHashSetFieldInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectHashSetFieldInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectIdentityMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectIdentityMap.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectIdentityMap.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectIdentityMap.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterrupted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterrupted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterrupted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterrupted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterruptedInLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterruptedInLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterruptedInLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterruptedInLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterruptedUpdated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterruptedUpdated.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterruptedUpdated.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterruptedUpdated.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterruptedUsed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterruptedUsed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterruptedUsed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterruptedUsed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterruptedUsedFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterruptedUsedFinal.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectInterruptedUsedFinal.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectInterruptedUsedFinal.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectLambda.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectLambda.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectLambda.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectLinkedHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectLinkedHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectLinkedHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectLinkedHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectListSuperType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectListSuperType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectListSuperType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectListSuperType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNewList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNewList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNewList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNewList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNewListArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNewListArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNewListArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNewListArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNewListArrayInCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNewListArrayInCall.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNewListArrayInCall.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNewListArrayInCall.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNewTreeSetArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNewTreeSetArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNewTreeSetArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNewTreeSetArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNulls.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNulls.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectNulls.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectNulls.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectQualifierDependsOnLoopParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectQualifierDependsOnLoopParameter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectQualifierDependsOnLoopParameter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectQualifierDependsOnLoopParameter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSelfCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSelfCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSelfCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSelfCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSetParameter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSetParameter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSetParameter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSetParameter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSorted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSorted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSorted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSorted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSortedNatural.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSortedNatural.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSortedNatural.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSortedNatural.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSupertype.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSupertype.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectSupertype.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectSupertype.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToMap.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToMap.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToMap.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToMapPut.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToMapPut.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToMapPut.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToMapPut.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToMapPutIfAbsent.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToMapPutIfAbsent.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToMapPutIfAbsent.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToMapPutIfAbsent.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToMapPutInvalid.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToMapPutInvalid.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToMapPutInvalid.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToMapPutInvalid.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToObj.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToObj.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectToObj.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectToObj.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectWithAnonymous.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectWithAnonymous.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectWithAnonymous.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectWithAnonymous.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectWithLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectWithLambda.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectWithLambda.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectWithLambda.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectWithSameLambda.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectWithSameLambda.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectWithSameLambda.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeCollectWithSameLambda.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeGroupingByArrayList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingByArrayList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeGroupingByArrayList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingByArrayList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeGroupingByCustomCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingByCustomCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeGroupingByCustomCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingByCustomCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeGroupingByDownstream.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingByDownstream.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeGroupingByDownstream.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingByDownstream.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeGroupingBySimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingBySimple.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeGroupingBySimple.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeGroupingBySimple.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoining.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoining.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoining.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoining.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningAssign.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningAssign.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningAssign.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningAssign.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningConcat.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningConcat.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningConcat.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningConcat.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningDelimited.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningDelimited.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningDelimited.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningDelimited.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningDelimitedWrongBuilder.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningDelimitedWrongBuilder.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningDelimitedWrongBuilder.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningDelimitedWrongBuilder.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningInBrackets.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningInBrackets.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningInBrackets.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningInBrackets.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningInitialValue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningInitialValue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningInitialValue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningInitialValue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningReused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningReused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningReused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningReused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningStringBuilderReused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningStringBuilderReused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningStringBuilderReused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningStringBuilderReused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningUsingIndex.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningUsingIndex.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeJoiningUsingIndex.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeJoiningUsingIndex.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeWildcardCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeWildcardCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeWildcardCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeWildcardCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionsAddAllArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionsAddAllArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionsAddAllPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionsAddAllPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionsAddAllVarArg.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllVarArg.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionsAddAllVarArg.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllVarArg.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionsAddAllArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionsAddAllArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionsAddAllPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionsAddAllPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionsAddAllVarArg.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllVarArg.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionsAddAllVarArg.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllVarArg.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionsAddAllWrongLimit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllWrongLimit.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionsAddAllWrongLimit.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllWrongLimit.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueNegate.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueNegate.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueNegate.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueNegate.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueNegateFloat.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueNegateFloat.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueNegateFloat.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueNegateFloat.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueNested.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueNested.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueNested.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueNested.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueNestedElse.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueNestedElse.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueNestedElse.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueNestedElse.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueOr.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueOr.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterContinueOr.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/afterContinueOr.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueInside.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueInside.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueInside.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueInside.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNegate.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNegate.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNegate.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNegate.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNegateFloat.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNegateFloat.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNegateFloat.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNegateFloat.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNested.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNested.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNested.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNested.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNestedElse.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNestedElse.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNestedElse.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNestedElse.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNestedLabel.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNestedLabel.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueNestedLabel.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueNestedLabel.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueOr.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueOr.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeContinueOr.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/continue/beforeContinueOr.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCountArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/afterCountArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCountArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/afterCountArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCountInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/afterCountInner.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCountInner.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/afterCountInner.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCountOuter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/afterCountOuter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCountOuter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/afterCountOuter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCountPrimitiveArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/afterCountPrimitiveArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCountPrimitiveArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/afterCountPrimitiveArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountInner.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountInner.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountInner.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountInner.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountOuter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountOuter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountOuter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountOuter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountPrimitiveArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountPrimitiveArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountPrimitiveArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountPrimitiveArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountShortArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountShortArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCountShortArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/count/beforeCountShortArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterDistinctCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/afterDistinctCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterDistinctCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/afterDistinctCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterDistinctCollectLimit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/afterDistinctCollectLimit.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterDistinctCollectLimit.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/afterDistinctCollectLimit.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDistinctCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDistinctCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDistinctCollectLimit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollectLimit.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDistinctCollectLimit.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollectLimit.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDistinctCollectWrongItem.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollectWrongItem.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDistinctCollectWrongItem.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollectWrongItem.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter1.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter1.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter1.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter2.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter2.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter2.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter3.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter3.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter3.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter4.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCollectionDependencyInFilter4.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterCollectionDependencyInFilter4.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterFlatMapCollectionFilterMapCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterFlatMapCollectionFilterMapCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterFlatMapCollectionFilterMapCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterFlatMapCollectionFilterMapCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterFlatMapMapFilterCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterFlatMapMapFilterCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterFlatMapMapFilterCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterFlatMapMapFilterCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterMapFlatMapArrayCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterMapFlatMapArrayCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterMapFlatMapArrayCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterMapFlatMapArrayCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterMapFlatMapArrayMapCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterMapFlatMapArrayMapCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterMapFlatMapArrayMapCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterMapFlatMapArrayMapCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterMapForEach.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterMapForEach.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterMapForEach.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterMapForEach.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterNoBraces.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterNoBraces.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFilterNoBraces.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterFilterNoBraces.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNormalNestedFilters.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterNormalNestedFilters.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNormalNestedFilters.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/afterNormalNestedFilters.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter1.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter1.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter1.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter2.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter2.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter2.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter3.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter3.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter3.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter4.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCollectionDependencyInFilter4.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeCollectionDependencyInFilter4.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterFlatMapCollectionFilterMapCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterFlatMapCollectionFilterMapCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterFlatMapCollectionFilterMapCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterFlatMapCollectionFilterMapCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterFlatMapMapFilterCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterFlatMapMapFilterCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterFlatMapMapFilterCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterFlatMapMapFilterCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterMapFlatMapArrayCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterMapFlatMapArrayCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterMapFlatMapArrayCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterMapFlatMapArrayCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterMapFlatMapArrayMapCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterMapFlatMapArrayMapCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterMapFlatMapArrayMapCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterMapFlatMapArrayMapCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterMapForEach.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterMapForEach.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterMapForEach.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterMapForEach.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterNoBraces.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterNoBraces.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFilterNoBraces.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeFilterNoBraces.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNormalNestedFilters.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeNormalNestedFilters.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNormalNestedFilters.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/filter/beforeNormalNestedFilters.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirst.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirst.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirst.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirst.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentCast.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentCast.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentCast.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentIntermediate.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentIntermediate.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentIntermediate.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentIntermediate.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentInterrupted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentInterrupted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentInterrupted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentInterrupted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentUsedInSameDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentUsedInSameDeclaration.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentUsedInSameDeclaration.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentUsedInSameDeclaration.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentWithLabel.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentWithLabel.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstAssignmentWithLabel.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstAssignmentWithLabel.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstBoolean.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstBoolean.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstBoolean.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstBoolean.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstCast.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstCast.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstCast.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstEnum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstEnum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstEnum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstEnum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstField.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstField.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstField.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstIfPresent.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstIfPresent.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstIfPresent.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstIfPresent.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstIfPresentWithReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstIfPresentWithReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstIfPresentWithReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstIfPresentWithReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstOptional.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstOptional.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstOptional.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstOptional.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstOptionalFlatMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstOptionalFlatMap.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstOptionalFlatMap.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstOptionalFlatMap.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstOptionalType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstOptionalType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstOptionalType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstOptionalType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstOuterIf.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstOuterIf.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstOuterIf.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstOuterIf.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstReAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstReAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstReAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstReAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstReturnUnreachable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstReturnUnreachable.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstReturnUnreachable.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstReturnUnreachable.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstRunnableTernary.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstRunnableTernary.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstRunnableTernary.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstRunnableTernary.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstStaticField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstStaticField.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstStaticField.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstStaticField.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstTernary.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstTernary.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstTernary.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstTernary.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstValueReused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstValueReused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFindFirstValueReused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/afterFindFirstValueReused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirst.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirst.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirst.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirst.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentCast.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentCast.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentCast.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentIntermediate.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentIntermediate.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentIntermediate.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentIntermediate.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentInterrupted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentInterrupted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentInterrupted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentInterrupted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentNested.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentNested.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentNested.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentNested.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentPrimitiveMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentPrimitiveMap.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentPrimitiveMap.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentPrimitiveMap.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentUsedInSameDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentUsedInSameDeclaration.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentUsedInSameDeclaration.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentUsedInSameDeclaration.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentWithLabel.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentWithLabel.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstAssignmentWithLabel.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstAssignmentWithLabel.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstBoolean.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstBoolean.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstBoolean.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstBoolean.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstCall.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstCall.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstCall.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstCast.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstCast.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstCast.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstEnum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstEnum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstEnum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstEnum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstField.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstField.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstField.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstFieldOther.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstFieldOther.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstFieldOther.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstFieldOther.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstIfPresent.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstIfPresent.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstIfPresent.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstIfPresent.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstIfPresentTwoStatements.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstIfPresentTwoStatements.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstIfPresentTwoStatements.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstIfPresentTwoStatements.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstIfPresentWithReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstIfPresentWithReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstIfPresentWithReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstIfPresentWithReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstOptional.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstOptional.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstOptional.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstOptional.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstOptionalFlatMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstOptionalFlatMap.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstOptionalFlatMap.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstOptionalFlatMap.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstOptionalType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstOptionalType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstOptionalType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstOptionalType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstOuterIf.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstOuterIf.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstOuterIf.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstOuterIf.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstPrimitiveNonTrivial.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstPrimitiveNonTrivial.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstPrimitiveNonTrivial.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstPrimitiveNonTrivial.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstReAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstReAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstReAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstReAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstReturn.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstReturn.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstReturn.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstReturn.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstReturnUnreachable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstReturnUnreachable.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstReturnUnreachable.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstReturnUnreachable.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstRunnableTernary.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstRunnableTernary.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstRunnableTernary.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstRunnableTernary.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstStaticField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstStaticField.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstStaticField.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstStaticField.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstTernary.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstTernary.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstTernary.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstTernary.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstUsedInBound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstUsedInBound.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstUsedInBound.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstUsedInBound.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstValueReused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstValueReused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFindFirstValueReused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/findFirst/beforeFindFirstValueReused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFlatMapChangePrimitiveType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/afterFlatMapChangePrimitiveType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFlatMapChangePrimitiveType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/afterFlatMapChangePrimitiveType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFlatMapForLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/afterFlatMapForLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFlatMapForLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/afterFlatMapForLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFlatten2DArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/afterFlatten2DArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFlatten2DArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/afterFlatten2DArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFlatten2DArrayPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/afterFlatten2DArrayPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFlatten2DArrayPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/afterFlatten2DArrayPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFlatMapChangePrimitiveType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/beforeFlatMapChangePrimitiveType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFlatMapChangePrimitiveType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/beforeFlatMapChangePrimitiveType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFlatMapForLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/beforeFlatMapForLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFlatMapForLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/beforeFlatMapForLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFlatten2DArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/beforeFlatten2DArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFlatten2DArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/beforeFlatten2DArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFlatten2DArrayPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/beforeFlatten2DArrayPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFlatten2DArrayPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/flatMap/beforeFlatten2DArrayPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForEachCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/afterForEachCast.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForEachCast.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/afterForEachCast.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForeachMethodRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/afterForeachMethodRef.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForeachMethodRef.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/afterForeachMethodRef.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForEachCast.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/beforeForEachCast.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForEachCast.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/beforeForEachCast.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForeachMethodRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/beforeForeachMethodRef.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForeachMethodRef.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/foreach/beforeForeachMethodRef.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCollectAddedOps.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCollectAddedOps.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCollectAddedOps.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCollectAddedOps.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCollectInNestedLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCollectInNestedLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCollectInNestedLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCollectInNestedLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCount.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCount.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCount.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCount.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCountGreater.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCountGreater.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCountGreater.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCountGreater.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCountPostfix.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCountPostfix.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCountPostfix.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCountPostfix.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCountPrefix.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCountPrefix.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitCountPrefix.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitCountPrefix.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitFind.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitFind.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitFind.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitFind.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitIntermediate.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitIntermediate.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterLimitIntermediate.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterLimitIntermediate.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterRangeLimited.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterRangeLimited.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterRangeLimited.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/afterRangeLimited.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectAddedOps.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectAddedOps.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectAddedOps.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectAddedOps.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectInNestedLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectInNestedLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectInNestedLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectInNestedLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectInOuterLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectInOuterLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectInOuterLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectInOuterLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectWrongCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectWrongCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCollectWrongCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCollectWrongCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCount.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCount.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCount.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCount.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCountGreater.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCountGreater.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCountGreater.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCountGreater.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCountPostfix.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCountPostfix.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCountPostfix.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCountPostfix.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCountPrefix.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCountPrefix.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCountPrefix.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCountPrefix.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCountRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCountRef.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitCountRef.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitCountRef.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitFind.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitFind.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitFind.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitFind.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitIntermediate.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitIntermediate.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeLimitIntermediate.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeLimitIntermediate.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRangeLimited.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeRangeLimited.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRangeLimited.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/limit/beforeRangeLimited.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparable.java new file mode 100644 index 000000000000..6269b15ea43c --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparable.java @@ -0,0 +1,34 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparing(Person::getName)).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparableMaxAsArg.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparableMaxAsArg.java new file mode 100644 index 000000000000..8c3df0b76ffb --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparableMaxAsArg.java @@ -0,0 +1,41 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null || p.getName().compareTo(maxPerson.getName()) < 0) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparator.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparator.java new file mode 100644 index 000000000000..5d110312c0d5 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxComparator.java @@ -0,0 +1,36 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson; + Comparator personComparator = Comparator.comparingInt(Person::getAge); + maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(personComparator).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java new file mode 100644 index 000000000000..e95360866377 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitive.java @@ -0,0 +1,9 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + public void work(int[] ints) { + int max = Arrays.stream(ints).filter(anInt -> anInt < 10).filter(anInt -> anInt >= 0).max().orElse(0); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitiveNegated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitiveNegated.java new file mode 100644 index 000000000000..7e0a64b37ed1 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxPrimitiveNegated.java @@ -0,0 +1,9 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + public void work(int[] ints) { + int max = Arrays.stream(ints).max().orElse(Integer.MIN_VALUE); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference1.java new file mode 100644 index 000000000000..3f94126247df --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference1.java @@ -0,0 +1,32 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference2.java new file mode 100644 index 000000000000..35e4495bf19f --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference2.java @@ -0,0 +1,34 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference3.java new file mode 100644 index 000000000000..35e4495bf19f --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReference3.java @@ -0,0 +1,34 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(Person::getAge)).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceField.java new file mode 100644 index 000000000000..3681b02f6c80 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceField.java @@ -0,0 +1,34 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).max(Comparator.comparingInt(p -> p.age)).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmp.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmp.java new file mode 100644 index 000000000000..4d0ea8ccf7fe --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmp.java @@ -0,0 +1,34 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).filter(p -> p.getAge() >= 0).max(Comparator.comparingInt(Person::getAge)).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmpParens.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmpParens.java new file mode 100644 index 000000000000..4d0ea8ccf7fe --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMaxReferenceTmpParens.java @@ -0,0 +1,34 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = personList.stream().filter(p -> p.getAge() > 13).filter(p -> p.getAge() >= 0).max(Comparator.comparingInt(Person::getAge)).orElse(null); + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinInitialValueWithoutFilter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinInitialValueWithoutFilter.java new file mode 100644 index 000000000000..ddfff0416b55 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinInitialValueWithoutFilter.java @@ -0,0 +1,9 @@ +// "Replace with max()" "true" + +import java.util.*; + +class Main { + public void work(long[] ints) { + long max = Arrays.stream(ints).filter(anInt -> anInt < 10).max().orElse(Long.MIN_VALUE); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitive.java new file mode 100644 index 000000000000..e4f443700d16 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitive.java @@ -0,0 +1,9 @@ +// "Replace with min()" "true" + +import java.util.*; + +public class Main { + public void work(int[] ints) { + int min = Arrays.stream(ints).filter(anInt -> anInt < 10).filter(anInt -> anInt <= 0).min().orElse(0); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveMap.java new file mode 100644 index 000000000000..8277d1570d3d --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveMap.java @@ -0,0 +1,9 @@ +// "Replace with min()" "true" + +import java.util.*; + +public class Main { + public void work(int[] ints) { + int min = Arrays.stream(ints).filter(anInt -> anInt < 10).map(anInt -> anInt + 2343).filter(anInt -> anInt <= 0).min().orElse(0); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveNonTrivialSelector.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveNonTrivialSelector.java new file mode 100644 index 000000000000..d1ee2cdebb20 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveNonTrivialSelector.java @@ -0,0 +1,9 @@ +// "Replace with min()" "true" + +import java.util.Arrays; + +public class Main { + public void work(int[] ints) { + int min = Arrays.stream(ints).filter(anInt -> anInt < 10).map(anInt -> anInt + anInt * 2 - 10).filter(anInt -> anInt <= 0).min().orElse(0); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReference.java new file mode 100644 index 000000000000..6e7d045a3768 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReference.java @@ -0,0 +1,34 @@ +// "Replace with min()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person minPerson = personList.stream().filter(p -> p.getAge() > 13).min(Comparator.comparingInt(Person::getAge)).orElse(null); + + return minPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReferenceInitializerNotJustBefore.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReferenceInitializerNotJustBefore.java new file mode 100644 index 000000000000..605b41d220b9 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinReferenceInitializerNotJustBefore.java @@ -0,0 +1,33 @@ +// "Replace with min()" "true" + +import java.util.*; + +class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + Person minPerson; + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + minPerson = personList.stream().filter(p -> p.getAge() > 13).min(Comparator.comparingInt(Person::getAge)).orElse(null); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparable.java new file mode 100644 index 000000000000..c420415ca67f --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparable.java @@ -0,0 +1,41 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null || maxPerson.getName().compareTo(p.getName()) < 0) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparableMaxAsArg.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparableMaxAsArg.java new file mode 100644 index 000000000000..f8e664ba34a2 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparableMaxAsArg.java @@ -0,0 +1,41 @@ +// "Replace with max()" "false" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null || p.getName().compareTo(maxPerson.getName()) < 0) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparator.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparator.java new file mode 100644 index 000000000000..fcfc63b81cc3 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxComparator.java @@ -0,0 +1,42 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + Comparator personComparator = Comparator.comparingInt(Person::getAge); + for(Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null || personComparator.compare(maxPerson, p) < 0) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitive.java new file mode 100644 index 000000000000..4b90197bc970 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitive.java @@ -0,0 +1,16 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + public void work(int[] ints) { + int max = 0; + for (int anInt : ints) { + if(anInt < 10) { + if(max < anInt) { + max = anInt; + } + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNegated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNegated.java new file mode 100644 index 000000000000..192c87e99ed3 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNegated.java @@ -0,0 +1,13 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + public void work(int[] ints) { + int max = Integer.MIN_VALUE; + for (int i : ints) { + if(i < max) continue; + max = i; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleComparision.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleComparision.java new file mode 100644 index 000000000000..afa5c4c21a66 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleComparision.java @@ -0,0 +1,17 @@ +// "Replace with max()" "false" + +import java.util.*; + +public class Main { + public void max(int[] ints) { + int another; + int max = 0; + for (int anInt : ints) { + if(anInt < 10) { + if(max < another) { + max = anInt; + } + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleVariable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleVariable.java new file mode 100644 index 000000000000..841e83056f40 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxPrimitiveNonCycleVariable.java @@ -0,0 +1,17 @@ +// "Replace with max()" "false" + +import java.util.*; + +public class Main { + public void max(int[] ints) { + int another = 1; + int max = 0; + for (int anInt : ints) { + if(anInt < 10) { + if(max < another) { + max = another; + } + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference1.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference1.java new file mode 100644 index 000000000000..7678e2a63708 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference1.java @@ -0,0 +1,39 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null || maxPerson.getAge() < p.getAge()) { + maxPerson = p; + } + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference2.java new file mode 100644 index 000000000000..30d4c101ddbf --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference2.java @@ -0,0 +1,44 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null) { + maxPerson = p; + } + else if (maxPerson.getAge() < p.getAge()) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference3.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference3.java new file mode 100644 index 000000000000..5bdcc6abb1c7 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference3.java @@ -0,0 +1,41 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null || p.getAge() > maxPerson.getAge()) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference4.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference4.java new file mode 100644 index 000000000000..e8f11be2891e --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReference4.java @@ -0,0 +1,41 @@ +// "Replace with max()" "false" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (p.getAge() > maxPerson.getAge() || maxPerson == null) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceField.java new file mode 100644 index 000000000000..6bdee6f2db9b --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceField.java @@ -0,0 +1,41 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null || p.age > maxPerson.age) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceShortMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceShortMethod.java new file mode 100644 index 000000000000..fdc21e6b629d --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceShortMethod.java @@ -0,0 +1,41 @@ +// "Replace with max()" "false" + +import java.util.*; + +public class Main { + static class Person { + String name; + short age; + + public String getName() { + return name; + } + + public short getAge() { + return age; + } + + public Person(String name, short age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (p.getAge() > maxPerson.getAge() || maxPerson == null) { + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceTmp.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceTmp.java new file mode 100644 index 000000000000..76be73d2c984 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceTmp.java @@ -0,0 +1,43 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + int maxAge = 0; + for (Person p : personList) { + if(p.getAge() > 13) { + if (maxPerson == null || maxAge < p.getAge()) { + maxAge = p.getAge() + maxPerson = p; + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceTmpParens.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceTmpParens.java new file mode 100644 index 000000000000..eab765fb2d77 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMaxReferenceTmpParens.java @@ -0,0 +1,43 @@ +// "Replace with max()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person max() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person maxPerson = null; + int maxAge = 0; + for (Person p : personList) { + if(p.getAge() > 13) { + if (((maxPerson) == null) || ((maxAge < p.getAge()))) { + maxAge = (p.getAge()); + maxPerson = (p); + } + } + } + + return maxPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinInitialValueWithoutFilter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinInitialValueWithoutFilter.java new file mode 100644 index 000000000000..0176f7821dfe --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinInitialValueWithoutFilter.java @@ -0,0 +1,16 @@ +// "Replace with max()" "true" + +import java.util.*; + +class Main { + public void work(long[] ints) { + long max = Long.MIN_VALUE; + for (long anInt : ints) { + if(anInt < 10) { + if(max < anInt) { + max = anInt; + } + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitive.java new file mode 100644 index 000000000000..f8499ba73721 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitive.java @@ -0,0 +1,16 @@ +// "Replace with min()" "true" + +import java.util.*; + +public class Main { + public void work(int[] ints) { + int min = 0; + for (int anInt : ints) { + if(anInt < 10) { + if(min > anInt) { + min = anInt; + } + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveMap.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveMap.java new file mode 100644 index 000000000000..2bea80e7c9a8 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveMap.java @@ -0,0 +1,16 @@ +// "Replace with min()" "true" + +import java.util.*; + +public class Main { + public void work(int[] ints) { + int min = 0; + for (int anInt : ints) { + if(anInt < 10) { + if(min > anInt + 2343) { + min = anInt + 2343; + } + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveNonTrivialSelector.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveNonTrivialSelector.java new file mode 100644 index 000000000000..925de4b9cdcb --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveNonTrivialSelector.java @@ -0,0 +1,14 @@ +// "Replace with min()" "true" + +public class Main { + public void work(int[] ints) { + int min = 0; + for ( int anInt :ints){ + if (anInt < 10) { + if (min > anInt + anInt * 2 - 10) { + min = anInt + anInt * 2 - 10; + } + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReference.java new file mode 100644 index 000000000000..8a5265dbccf5 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReference.java @@ -0,0 +1,41 @@ +// "Replace with min()" "true" + +import java.util.*; + +public class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + Person minPerson = null; + for (Person p : personList) { + if(p.getAge() > 13) { + if (minPerson == null || minPerson.getAge() > p.getAge()) { + minPerson = p; + } + } + } + + return minPerson; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReferenceInitializerNotJustBefore.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReferenceInitializerNotJustBefore.java new file mode 100644 index 000000000000..33af9219a9be --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinReferenceInitializerNotJustBefore.java @@ -0,0 +1,39 @@ +// "Replace with min()" "true" + +import java.util.*; + +class Main { + static class Person { + String name; + int age; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + } + + public Person work() { + Person minPerson = null; + List personList = Arrays.asList( + new Person("Roman", 21), + new Person("James", 25), + new Person("Kelly", 12) + ); + for (Person p : personList) { + if(p.getAge() > 13) { + if (minPerson == null || minPerson.getAge() > p.getAge()) { + minPerson = p; + } + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNoneMatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/noneMatch/afterNoneMatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNoneMatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/noneMatch/afterNoneMatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNoneMatchContinue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/noneMatch/afterNoneMatchContinue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNoneMatchContinue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/noneMatch/afterNoneMatchContinue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNoneMatch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/noneMatch/beforeNoneMatch.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNoneMatch.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/noneMatch/beforeNoneMatch.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNoneMatchContinue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/noneMatch/beforeNoneMatchContinue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNoneMatchContinue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/noneMatch/beforeNoneMatchContinue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCastExpected.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterCastExpected.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCastExpected.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterCastExpected.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCastInIterValue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterCastInIterValue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCastInIterValue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterCastInIterValue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCompactFilterToMethodReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterCompactFilterToMethodReference.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterCompactFilterToMethodReference.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterCompactFilterToMethodReference.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterComputeIfAbsentChained.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterComputeIfAbsentChained.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterComputeIfAbsentChained.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterComputeIfAbsentChained.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterComputeIfAbsentSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterComputeIfAbsentSimple.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterComputeIfAbsentSimple.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterComputeIfAbsentSimple.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterDisableForArrays.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterDisableForArrays.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterDisableForArrays.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterDisableForArrays.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterExplicitArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterExplicitArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterExplicitArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterExplicitArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterForLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterForLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForLoopBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterForLoopBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForLoopBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterForLoopBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForLoopShortBound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterForLoopShortBound.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterForLoopShortBound.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterForLoopShortBound.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFromAsList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterFromAsList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFromAsList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterFromAsList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFromEmptyList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterFromEmptyList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterFromEmptyList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterFromEmptyList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIncompleteNewCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterIncompleteNewCall.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIncompleteNewCall.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterIncompleteNewCall.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMethodRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterMethodRef.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMethodRef.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterMethodRef.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMissedBraces.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterMissedBraces.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMissedBraces.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterMissedBraces.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNormal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterNormal.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNormal.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterNormal.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNormalComments.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterNormalComments.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNormalComments.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterNormalComments.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNormalNoBraces.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterNormalNoBraces.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterNormalNoBraces.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterNormalNoBraces.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterPrimitiveArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterPrimitiveArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterPrimitiveArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterPrimitiveArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterTooLazyCalculation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterTooLazyCalculation.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterTooLazyCalculation.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/afterTooLazyCalculation.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBreakInside.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeBreakInside.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeBreakInside.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeBreakInside.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCastExpected.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeCastExpected.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCastExpected.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeCastExpected.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCastInIterValue.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeCastInIterValue.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCastInIterValue.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeCastInIterValue.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCompactFilterToMethodReference.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeCompactFilterToMethodReference.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeCompactFilterToMethodReference.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeCompactFilterToMethodReference.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeComputeIfAbsentChained.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeComputeIfAbsentChained.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeComputeIfAbsentChained.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeComputeIfAbsentChained.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeComputeIfAbsentSimple.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeComputeIfAbsentSimple.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeComputeIfAbsentSimple.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeComputeIfAbsentSimple.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDisableForArrays.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeDisableForArrays.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDisableForArrays.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeDisableForArrays.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeExceptionIsThrown.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeExceptionIsThrown.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeExceptionIsThrown.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeExceptionIsThrown.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeExplicitArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeExplicitArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeExplicitArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeExplicitArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoop.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoop.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoop.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoop.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopFloatBound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopFloatBound.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopFloatBound.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopFloatBound.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopShortBound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopShortBound.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopShortBound.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopShortBound.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopUpdated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopUpdated.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopUpdated.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopUpdated.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopWrongBound.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopWrongBound.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopWrongBound.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopWrongBound.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopWrongIncrement.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopWrongIncrement.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopWrongIncrement.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopWrongIncrement.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopWrongInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopWrongInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeForLoopWrongInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeForLoopWrongInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFromAsList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeFromAsList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFromAsList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeFromAsList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFromEmptyList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeFromEmptyList.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFromEmptyList.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeFromEmptyList.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIfIncomplete.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeIfIncomplete.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIfIncomplete.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeIfIncomplete.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIncompleteLabel.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeIncompleteLabel.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIncompleteLabel.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeIncompleteLabel.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIncompleteNewCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeIncompleteNewCall.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIncompleteNewCall.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeIncompleteNewCall.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIterable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeIterable.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIterable.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeIterable.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMayBeNotInitializedAndThusNotEffectivelyFinal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeMayBeNotInitializedAndThusNotEffectivelyFinal.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMayBeNotInitializedAndThusNotEffectivelyFinal.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeMayBeNotInitializedAndThusNotEffectivelyFinal.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMethodRef.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeMethodRef.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMethodRef.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeMethodRef.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMissedBraces.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeMissedBraces.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMissedBraces.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeMissedBraces.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNoFilter.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNoFilter.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNoFilter.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNoFilter.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNormal.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNormal.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNormal.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNormal.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNormalComments.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNormalComments.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNormalComments.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNormalComments.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNormalNoBraces.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNormalNoBraces.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNormalNoBraces.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNormalNoBraces.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNotEffectivelyFinalVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNotEffectivelyFinalVar.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeNotEffectivelyFinalVar.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeNotEffectivelyFinalVar.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforePrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforePrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforePrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforePrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforePrimitiveArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforePrimitiveArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforePrimitiveArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforePrimitiveArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforePrimitiveArrayWrongType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforePrimitiveArrayWrongType.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforePrimitiveArrayWrongType.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforePrimitiveArrayWrongType.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRangeReassigned.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeRangeReassigned.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRangeReassigned.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeRangeReassigned.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRangeReassignedNested.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeRangeReassignedNested.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRangeReassignedNested.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeRangeReassignedNested.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRawCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeRawCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRawCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeRawCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRawCollectionSubstitution.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeRawCollectionSubstitution.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeRawCollectionSubstitution.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeRawCollectionSubstitution.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeReturnInside.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeReturnInside.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeReturnInside.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeReturnInside.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeThrownCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeThrownCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeThrownCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeThrownCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeThrownExceptionsNotMatched.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeThrownExceptionsNotMatched.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeThrownExceptionsNotMatched.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeThrownExceptionsNotMatched.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeTooLazyCalculation.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeTooLazyCalculation.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeTooLazyCalculation.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/other/beforeTooLazyCalculation.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnd.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAnd.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAnd.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAnd.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAndHighestBit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAndHighestBit.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAndHighestBit.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAndHighestBit.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAndReplacingHexInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAndReplacingHexInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAndReplacingHexInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAndReplacingHexInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAndReplacingInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAndReplacingInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAndReplacingInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAndReplacingInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAndReplacingLongInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAndReplacingLongInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAndReplacingLongInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterAndReplacingLongInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterConjunction.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterConjunction.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterConjunction.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterConjunction.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterConjunctionBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterConjunctionBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterConjunctionBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterConjunctionBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterDisjunction.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterDisjunction.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterDisjunction.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterDisjunction.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiply.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiply.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiply.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiply.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyComplexInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyComplexInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyComplexInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyComplexInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyConflictingVariable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyConflictingVariable.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyConflictingVariable.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyConflictingVariable.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyNarrowingTypeInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyNarrowingTypeInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyNarrowingTypeInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyNarrowingTypeInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyNotOneInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyNotOneInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyNotOneInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyNotOneInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyWithMapping.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyWithMapping.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterMultiplyWithMapping.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterMultiplyWithMapping.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterOr.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterOr.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterOr.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterOr.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterXor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterXor.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterXor.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterXor.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterXorLong.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterXorLong.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterXorLong.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/afterXorLong.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnd.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAnd.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAnd.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAnd.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAndHighestBit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAndHighestBit.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAndHighestBit.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAndHighestBit.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAndReplacingHexInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAndReplacingHexInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAndReplacingHexInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAndReplacingHexInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAndReplacingInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAndReplacingInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAndReplacingInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAndReplacingInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAndReplacingLongInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAndReplacingLongInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeAndReplacingLongInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeAndReplacingLongInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeConjunction.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeConjunction.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeConjunction.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeConjunction.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeConjunctionBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeConjunctionBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeConjunctionBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeConjunctionBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDisjunction.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeDisjunction.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeDisjunction.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeDisjunction.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiply.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiply.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiply.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiply.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyComplexInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyComplexInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyComplexInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyComplexInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyConflictingVariable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyConflictingVariable.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyConflictingVariable.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyConflictingVariable.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyNarrowingTypeInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyNarrowingTypeInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyNarrowingTypeInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyNarrowingTypeInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyNotOneInitializer.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyNotOneInitializer.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyNotOneInitializer.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyNotOneInitializer.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyWithMapping.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyWithMapping.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeMultiplyWithMapping.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeMultiplyWithMapping.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeOr.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeOr.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeOr.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeOr.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeXor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeXor.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeXor.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeXor.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeXorLong.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeXorLong.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeXorLong.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/reduce/beforeXorLong.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSortedToArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sorted/afterSortedToArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSortedToArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sorted/afterSortedToArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSortedToArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sorted/beforeSortedToArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSortedToArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sorted/beforeSortedToArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIntArraySum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterIntArraySum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIntArraySum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterIntArraySum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIntFilterSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterIntFilterSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIntFilterSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterIntFilterSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIntSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterIntSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIntSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterIntSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIntegerSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterIntegerSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterIntegerSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterIntegerSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumArrayLength.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumArrayLength.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumArrayLength.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumArrayLength.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumArrayLengthNested.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumArrayLengthNested.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumArrayLengthNested.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumArrayLengthNested.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumInterruptedUnused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumInterruptedUnused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumInterruptedUnused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumInterruptedUnused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumInterruptedUsed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumInterruptedUsed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumInterruptedUsed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumInterruptedUsed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumNarrowing.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumNarrowing.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumNarrowing.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumNarrowing.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumNarrowingParens.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumNarrowingParens.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumNarrowingParens.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumNarrowingParens.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumPromotion.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumPromotion.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterSumPromotion.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/afterSumPromotion.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFloatSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeFloatSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeFloatSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeFloatSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIntArraySum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeIntArraySum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIntArraySum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeIntArraySum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIntFilterSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeIntFilterSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIntFilterSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeIntFilterSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIntSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeIntSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIntSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeIntSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIntegerSum.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeIntegerSum.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeIntegerSum.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeIntegerSum.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumAccessOuterFor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumAccessOuterFor.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumAccessOuterFor.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumAccessOuterFor.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumArrayLength.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumArrayLength.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumArrayLength.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumArrayLength.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumArrayLengthFloat.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumArrayLengthFloat.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumArrayLengthFloat.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumArrayLengthFloat.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumArrayLengthNested.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumArrayLengthNested.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumArrayLengthNested.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumArrayLengthNested.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumInterruptedUnused.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumInterruptedUnused.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumInterruptedUnused.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumInterruptedUnused.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumInterruptedUsed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumInterruptedUsed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumInterruptedUsed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumInterruptedUsed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumNarrowing.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumNarrowing.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumNarrowing.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumNarrowing.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumNarrowingParens.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumNarrowingParens.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumNarrowingParens.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumNarrowingParens.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumPromotion.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumPromotion.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeSumPromotion.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sum/beforeSumPromotion.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterTakeWhileJava9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/takeWhile/afterTakeWhileJava9.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterTakeWhileJava9.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/takeWhile/afterTakeWhileJava9.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeTakeWhile.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/takeWhile/beforeTakeWhile.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeTakeWhile.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/takeWhile/beforeTakeWhile.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeTakeWhileJava9.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/takeWhile/beforeTakeWhileJava9.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeTakeWhileJava9.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/takeWhile/beforeTakeWhileJava9.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayCounted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCounted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayCounted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCounted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayCountedBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayCountedBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayCountedLength2D.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedLength2D.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayCountedLength2D.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedLength2D.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayCountedLengthGeneric.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedLengthGeneric.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayCountedLengthGeneric.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedLengthGeneric.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayDeclaration.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayDeclaration.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayDeclaration.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayGeneric.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayGeneric.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayGeneric.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayGeneric.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayLinkedHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayLinkedHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayLinkedHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayLinkedHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayReusedCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayReusedCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayReusedCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayReusedCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArraySorted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArraySorted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArraySorted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArraySorted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayTreeSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayTreeSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayTreeSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayTreeSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayTwoDimensional.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayTwoDimensional.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterToArrayTwoDimensional.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayTwoDimensional.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayCounted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCounted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayCounted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCounted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayCountedBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayCountedBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayCountedLength2D.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedLength2D.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayCountedLength2D.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedLength2D.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayCountedLengthGeneric.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedLengthGeneric.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayCountedLengthGeneric.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedLengthGeneric.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayDeclaration.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayDeclaration.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayDeclaration.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayDeclarationCollectionUsed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayDeclarationCollectionUsed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayDeclarationCollectionUsed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayDeclarationCollectionUsed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayGeneric.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayGeneric.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayGeneric.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayGeneric.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayIdentityHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayIdentityHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayIdentityHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayIdentityHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayLinkedHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayLinkedHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayLinkedHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayLinkedHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayReusedCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayReusedCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayReusedCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayReusedCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArraySorted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArraySorted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArraySorted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArraySorted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayTreeSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayTreeSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayTreeSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayTreeSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayTwoDimensional.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayTwoDimensional.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayTwoDimensional.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayTwoDimensional.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayWrongSize.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayWrongSize.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/beforeToArrayWrongSize.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayWrongSize.java diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/StreamApiMigrationInspectionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/StreamApiMigrationInspectionTest.java index d80b0de30228..686add6ad00b 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/StreamApiMigrationInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/StreamApiMigrationInspectionTest.java @@ -15,33 +15,34 @@ */ package com.intellij.java.codeInsight.daemon.quickFix; -import com.intellij.codeInsight.daemon.quickFix.LightQuickFixParameterizedTestCase; -import com.intellij.codeInspection.LocalInspectionTool; -import com.intellij.codeInspection.streamMigration.StreamApiMigrationInspection; -import com.intellij.pom.java.LanguageLevel; -import org.jetbrains.annotations.NotNull; +import com.intellij.java.codeInsight.daemon.quickFix.streams.*; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; -public class StreamApiMigrationInspectionTest extends LightQuickFixParameterizedTestCase { - @NotNull - @Override - protected LocalInspectionTool[] configureLocalInspectionTools() { - StreamApiMigrationInspection inspection = new StreamApiMigrationInspection(); - inspection.SUGGEST_FOREACH = true; - return new LocalInspectionTool[]{ - inspection - }; - } +@RunWith(Suite.class) +@Suite.SuiteClasses({ + AllMatchStreamApiMigrationTest.class, + AnyMatchStreamApiMigrationTest.class, + BufferedReaderStreamApiMigrationTest.class, + CollectionsStreamApiMigrationTest.class, + CollectStreamApiMigrationTest.class, + ContinueStreamApiMigrationTest.class, + DistinctStreamApiMigrationTest.class, + FilterStreamApiMigrationTest.class, + FindFirstStreamApiMigrationTest.class, + FlatMapFirstStreamApiMigrationTest.class, + ForeachFirstStreamApiMigrationTest.class, + LimitStreamApiMigrationTest.class, + MinMaxStreamApiMigrationTest.class, + NoneMatchStreamApiMigrationTest.class, + OtherStreamApiMigrationTest.class, + ReductionOperationStreamApiMigrationTest.class, + SortedOperationStreamApiMigrationTest.class, + SumOperationStreamApiMigrationTest.class, + TakeWhileOperationStreamApiMigrationTest.class, + ToArrayOperationStreamApiMigrationTest.class +}) +public class StreamApiMigrationInspectionTest { - @Override - protected LanguageLevel getDefaultLanguageLevel() { - return LanguageLevel.JDK_1_8; - } - - public void test() throws Exception { doAllTests(); } - - @Override - protected String getBasePath() { - return "/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration"; - } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AllMatchStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AllMatchStreamApiMigrationTest.java new file mode 100644 index 000000000000..8a9474448101 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AllMatchStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class AllMatchStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "allMatch"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AnyMatchStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AnyMatchStreamApiMigrationTest.java new file mode 100644 index 000000000000..f9095677100e --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AnyMatchStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class AnyMatchStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "anyMatch"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/BufferedReaderStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/BufferedReaderStreamApiMigrationTest.java new file mode 100644 index 000000000000..d9e7489f2af5 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/BufferedReaderStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class BufferedReaderStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "bufferedReader"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectStreamApiMigrationTest.java new file mode 100644 index 000000000000..0e5ee2d05dfb --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class CollectStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "collect"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectionsStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectionsStreamApiMigrationTest.java new file mode 100644 index 000000000000..aa7a5bcfca21 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectionsStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class CollectionsStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "collections"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ContinueStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ContinueStreamApiMigrationTest.java new file mode 100644 index 000000000000..5d4fa9aaf09d --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ContinueStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class ContinueStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "continue"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/DistinctStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/DistinctStreamApiMigrationTest.java new file mode 100644 index 000000000000..d468810dccd4 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/DistinctStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class DistinctStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "distinct"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FilterStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FilterStreamApiMigrationTest.java new file mode 100644 index 000000000000..0ac365989343 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FilterStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class FilterStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "filter"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FindFirstStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FindFirstStreamApiMigrationTest.java new file mode 100644 index 000000000000..519f5afaadbb --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FindFirstStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class FindFirstStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "findFirst"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FlatMapFirstStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FlatMapFirstStreamApiMigrationTest.java new file mode 100644 index 000000000000..1881e1f35dc1 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FlatMapFirstStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class FlatMapFirstStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "flatMap"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ForeachFirstStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ForeachFirstStreamApiMigrationTest.java new file mode 100644 index 000000000000..d6186e1a5895 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ForeachFirstStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class ForeachFirstStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "foreach"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/LimitStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/LimitStreamApiMigrationTest.java new file mode 100644 index 000000000000..a04562580f65 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/LimitStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class LimitStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "limit"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/MinMaxStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/MinMaxStreamApiMigrationTest.java new file mode 100644 index 000000000000..9a2d98cb49d3 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/MinMaxStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class MinMaxStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "minMax"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/NoneMatchStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/NoneMatchStreamApiMigrationTest.java new file mode 100644 index 000000000000..5d0239a34883 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/NoneMatchStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class NoneMatchStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "noneMatch"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/OtherStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/OtherStreamApiMigrationTest.java new file mode 100644 index 000000000000..990bcdd39b13 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/OtherStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class OtherStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "other"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ReductionOperationStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ReductionOperationStreamApiMigrationTest.java new file mode 100644 index 000000000000..4b0b42b5b391 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ReductionOperationStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class ReductionOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "reduce"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SortedOperationStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SortedOperationStreamApiMigrationTest.java new file mode 100644 index 000000000000..a8b217beacbe --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SortedOperationStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class SortedOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "sorted"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/StreamApiMigrationInspectionBaseTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/StreamApiMigrationInspectionBaseTest.java new file mode 100644 index 000000000000..7e6021026909 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/StreamApiMigrationInspectionBaseTest.java @@ -0,0 +1,51 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + +import com.intellij.codeInsight.daemon.quickFix.LightQuickFixParameterizedTestCase; +import com.intellij.codeInspection.LocalInspectionTool; +import com.intellij.codeInspection.streamMigration.StreamApiMigrationInspection; +import com.intellij.pom.java.LanguageLevel; +import org.jetbrains.annotations.NotNull; + +/** + * Created by Roman Ivanov. + */ +public abstract class StreamApiMigrationInspectionBaseTest extends LightQuickFixParameterizedTestCase { + @NotNull + @Override + protected LocalInspectionTool[] configureLocalInspectionTools() { + StreamApiMigrationInspection inspection = new StreamApiMigrationInspection(); + inspection.SUGGEST_FOREACH = true; + return new LocalInspectionTool[]{ + inspection + }; + } + + @Override + protected LanguageLevel getDefaultLanguageLevel() { + return LanguageLevel.JDK_1_8; + } + + public void test() throws Exception { doAllTests(); } + + abstract String getFolder(); + + @Override + protected String getBasePath() { + return "/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/" + getFolder(); + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SumOperationStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SumOperationStreamApiMigrationTest.java new file mode 100644 index 000000000000..aeacb294a164 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SumOperationStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class SumOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "sum"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/TakeWhileOperationStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/TakeWhileOperationStreamApiMigrationTest.java new file mode 100644 index 000000000000..1c72684cc98e --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/TakeWhileOperationStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class TakeWhileOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "takeWhile"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ToArrayOperationStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ToArrayOperationStreamApiMigrationTest.java new file mode 100644 index 000000000000..71318107db58 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ToArrayOperationStreamApiMigrationTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.java.codeInsight.daemon.quickFix.streams; + + +/** + * Created by Roman Ivanov. + */ +public class ToArrayOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "toArray"; + } +} diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java index 61a5c9c02f5e..a692c2511412 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/ExpressionUtils.java @@ -762,6 +762,7 @@ public class ExpressionUtils { * @return extracted assignment or null if assignment is not found or assignment is compound */ @Contract("null -> null") + @Nullable public static PsiAssignmentExpression getAssignment(PsiElement element) { if(element instanceof PsiExpressionStatement) { element = ((PsiExpressionStatement)element).getExpression(); From 1d066a46a3e7ec7bc8092f1bc617626b8ee5d241 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Mon, 31 Jul 2017 16:11:54 +0700 Subject: [PATCH 22/28] rearrange tests --- .../afterCollectionsAddAllArray.java | 0 .../afterCollectionsAddAllPrimitive.java | 0 .../afterCollectionsAddAllVarArg.java | 0 .../beforeCollectionsAddAllArray.java | 0 .../beforeCollectionsAddAllPrimitive.java | 0 .../beforeCollectionsAddAllVarArg.java | 0 .../beforeCollectionsAddAllWrongLimit.java | 0 .../afterDistinctCollect.java | 0 .../afterDistinctCollectLimit.java | 0 .../afterSortedToArray.java | 0 .../afterToArray.java | 0 .../afterToArrayAssignment.java | 0 .../afterToArrayCounted.java | 0 .../afterToArrayCountedBoxed.java | 0 .../afterToArrayCountedLength2D.java | 0 .../afterToArrayCountedLengthGeneric.java | 0 .../afterToArrayDeclaration.java | 0 .../afterToArrayGeneric.java | 0 .../afterToArrayHashSet.java | 0 .../afterToArrayLinkedHashSet.java | 0 .../afterToArrayReusedCollection.java | 0 .../afterToArraySorted.java | 0 .../afterToArrayTreeSet.java | 0 .../afterToArrayTwoDimensional.java | 0 .../beforeDistinctCollect.java | 0 .../beforeDistinctCollectLimit.java | 0 .../beforeDistinctCollectWrongItem.java | 0 .../beforeSortedToArray.java | 0 .../beforeToArray.java | 0 .../beforeToArrayAssignment.java | 0 .../beforeToArrayCounted.java | 0 .../beforeToArrayCountedBoxed.java | 0 .../beforeToArrayCountedLength2D.java | 0 .../beforeToArrayCountedLengthGeneric.java | 0 .../beforeToArrayDeclaration.java | 0 ...eforeToArrayDeclarationCollectionUsed.java | 0 .../beforeToArrayGeneric.java | 0 .../beforeToArrayHashSet.java | 0 .../beforeToArrayIdentityHashSet.java | 0 .../beforeToArrayLinkedHashSet.java | 0 .../beforeToArrayReusedCollection.java | 0 .../beforeToArraySorted.java | 0 .../beforeToArrayTreeSet.java | 0 .../beforeToArrayTwoDimensional.java | 0 .../beforeToArrayWrongSize.java | 0 .../afterBufferedReaderCollect.java | 0 .../afterBufferedReaderCollectNestedOk.java | 0 .../beforeBufferedReaderCollect.java | 0 .../beforeBufferedReaderCollectNested.java | 0 .../beforeBufferedReaderCollectNestedOk.java | 0 .../StreamApiMigrationInspectionTest.java | 185 ++++++++++++++++-- .../AllMatchStreamApiMigrationTest.java | 27 --- .../AnyMatchStreamApiMigrationTest.java | 27 --- .../BufferedReaderStreamApiMigrationTest.java | 27 --- .../CollectStreamApiMigrationTest.java | 27 --- .../CollectionsStreamApiMigrationTest.java | 27 --- .../ContinueStreamApiMigrationTest.java | 27 --- .../DistinctStreamApiMigrationTest.java | 27 --- .../streams/FilterStreamApiMigrationTest.java | 27 --- .../FindFirstStreamApiMigrationTest.java | 27 --- .../FlatMapFirstStreamApiMigrationTest.java | 27 --- .../ForeachFirstStreamApiMigrationTest.java | 27 --- .../streams/LimitStreamApiMigrationTest.java | 27 --- .../streams/MinMaxStreamApiMigrationTest.java | 27 --- .../NoneMatchStreamApiMigrationTest.java | 27 --- .../streams/OtherStreamApiMigrationTest.java | 27 --- ...uctionOperationStreamApiMigrationTest.java | 27 --- ...SortedOperationStreamApiMigrationTest.java | 27 --- .../StreamApiMigrationInspectionBaseTest.java | 51 ----- .../SumOperationStreamApiMigrationTest.java | 27 --- ...eWhileOperationStreamApiMigrationTest.java | 27 --- ...oArrayOperationStreamApiMigrationTest.java | 27 --- 72 files changed, 164 insertions(+), 612 deletions(-) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{collections => addll}/afterCollectionsAddAllArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{collections => addll}/afterCollectionsAddAllPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{collections => addll}/afterCollectionsAddAllVarArg.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{collections => addll}/beforeCollectionsAddAllArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{collections => addll}/beforeCollectionsAddAllPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{collections => addll}/beforeCollectionsAddAllVarArg.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{collections => addll}/beforeCollectionsAddAllWrongLimit.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{distinct => afterAllActions}/afterDistinctCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{distinct => afterAllActions}/afterDistinctCollectLimit.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{sorted => afterAllActions}/afterSortedToArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/afterToArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/afterToArrayAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/afterToArrayCounted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/afterToArrayCountedBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/afterToArrayCountedLength2D.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/afterToArrayCountedLengthGeneric.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/afterToArrayDeclaration.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/afterToArrayGeneric.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/afterToArrayHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/afterToArrayLinkedHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/afterToArrayReusedCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/afterToArraySorted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/afterToArrayTreeSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/afterToArrayTwoDimensional.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{distinct => afterAllActions}/beforeDistinctCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{distinct => afterAllActions}/beforeDistinctCollectLimit.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{distinct => afterAllActions}/beforeDistinctCollectWrongItem.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{sorted => afterAllActions}/beforeSortedToArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArrayAssignment.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArrayCounted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArrayCountedBoxed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArrayCountedLength2D.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArrayCountedLengthGeneric.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArrayDeclaration.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArrayDeclarationCollectionUsed.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArrayGeneric.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArrayHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArrayIdentityHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArrayLinkedHashSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArrayReusedCollection.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArraySorted.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArrayTreeSet.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArrayTwoDimensional.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{toArray => afterAllActions}/beforeToArrayWrongSize.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{collect => bufferedReader}/afterBufferedReaderCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{collect => bufferedReader}/afterBufferedReaderCollectNestedOk.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{collect => bufferedReader}/beforeBufferedReaderCollect.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{collect => bufferedReader}/beforeBufferedReaderCollectNested.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{collect => bufferedReader}/beforeBufferedReaderCollectNestedOk.java (100%) delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AllMatchStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AnyMatchStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/BufferedReaderStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectionsStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ContinueStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/DistinctStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FilterStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FindFirstStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FlatMapFirstStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ForeachFirstStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/LimitStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/MinMaxStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/NoneMatchStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/OtherStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ReductionOperationStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SortedOperationStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/StreamApiMigrationInspectionBaseTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SumOperationStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/TakeWhileOperationStreamApiMigrationTest.java delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ToArrayOperationStreamApiMigrationTest.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/afterCollectionsAddAllArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/afterCollectionsAddAllArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/afterCollectionsAddAllPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/afterCollectionsAddAllPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllVarArg.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/afterCollectionsAddAllVarArg.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/afterCollectionsAddAllVarArg.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/afterCollectionsAddAllVarArg.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/beforeCollectionsAddAllArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/beforeCollectionsAddAllArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/beforeCollectionsAddAllPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/beforeCollectionsAddAllPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllVarArg.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/beforeCollectionsAddAllVarArg.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllVarArg.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/beforeCollectionsAddAllVarArg.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllWrongLimit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/beforeCollectionsAddAllWrongLimit.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collections/beforeCollectionsAddAllWrongLimit.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/beforeCollectionsAddAllWrongLimit.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/afterDistinctCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterDistinctCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/afterDistinctCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterDistinctCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/afterDistinctCollectLimit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterDistinctCollectLimit.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/afterDistinctCollectLimit.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterDistinctCollectLimit.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sorted/afterSortedToArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterSortedToArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sorted/afterSortedToArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterSortedToArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCounted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayCounted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCounted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayCounted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayCountedBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayCountedBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedLength2D.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayCountedLength2D.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedLength2D.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayCountedLength2D.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedLengthGeneric.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayCountedLengthGeneric.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayCountedLengthGeneric.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayCountedLengthGeneric.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayDeclaration.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayDeclaration.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayDeclaration.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayGeneric.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayGeneric.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayGeneric.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayGeneric.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayLinkedHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayLinkedHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayLinkedHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayLinkedHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayReusedCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayReusedCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayReusedCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayReusedCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArraySorted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArraySorted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArraySorted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArraySorted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayTreeSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayTreeSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayTreeSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayTreeSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayTwoDimensional.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayTwoDimensional.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/afterToArrayTwoDimensional.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/afterToArrayTwoDimensional.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeDistinctCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeDistinctCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollectLimit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeDistinctCollectLimit.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollectLimit.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeDistinctCollectLimit.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollectWrongItem.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeDistinctCollectWrongItem.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/distinct/beforeDistinctCollectWrongItem.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeDistinctCollectWrongItem.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sorted/beforeSortedToArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeSortedToArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/sorted/beforeSortedToArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeSortedToArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayAssignment.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayAssignment.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayAssignment.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayAssignment.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCounted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayCounted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCounted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayCounted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedBoxed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayCountedBoxed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedBoxed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayCountedBoxed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedLength2D.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayCountedLength2D.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedLength2D.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayCountedLength2D.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedLengthGeneric.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayCountedLengthGeneric.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayCountedLengthGeneric.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayCountedLengthGeneric.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayDeclaration.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayDeclaration.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayDeclaration.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayDeclaration.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayDeclarationCollectionUsed.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayDeclarationCollectionUsed.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayDeclarationCollectionUsed.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayDeclarationCollectionUsed.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayGeneric.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayGeneric.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayGeneric.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayGeneric.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayIdentityHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayIdentityHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayIdentityHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayIdentityHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayLinkedHashSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayLinkedHashSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayLinkedHashSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayLinkedHashSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayReusedCollection.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayReusedCollection.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayReusedCollection.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayReusedCollection.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArraySorted.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArraySorted.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArraySorted.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArraySorted.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayTreeSet.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayTreeSet.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayTreeSet.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayTreeSet.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayTwoDimensional.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayTwoDimensional.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayTwoDimensional.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayTwoDimensional.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayWrongSize.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayWrongSize.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/toArray/beforeToArrayWrongSize.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/afterAllActions/beforeToArrayWrongSize.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterBufferedReaderCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/afterBufferedReaderCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterBufferedReaderCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/afterBufferedReaderCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterBufferedReaderCollectNestedOk.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/afterBufferedReaderCollectNestedOk.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/afterBufferedReaderCollectNestedOk.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/afterBufferedReaderCollectNestedOk.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderCollect.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollect.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderCollect.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollectNested.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderCollectNested.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollectNested.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderCollectNested.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollectNestedOk.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderCollectNestedOk.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/collect/beforeBufferedReaderCollectNestedOk.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/bufferedReader/beforeBufferedReaderCollectNestedOk.java diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/StreamApiMigrationInspectionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/StreamApiMigrationInspectionTest.java index 686add6ad00b..ca2c51ec615e 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/StreamApiMigrationInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/StreamApiMigrationInspectionTest.java @@ -16,33 +16,176 @@ package com.intellij.java.codeInsight.daemon.quickFix; -import com.intellij.java.codeInsight.daemon.quickFix.streams.*; +import com.intellij.codeInsight.daemon.quickFix.LightQuickFixParameterizedTestCase; +import com.intellij.codeInspection.LocalInspectionTool; +import com.intellij.codeInspection.streamMigration.StreamApiMigrationInspection; +import com.intellij.pom.java.LanguageLevel; +import org.jetbrains.annotations.NotNull; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ - AllMatchStreamApiMigrationTest.class, - AnyMatchStreamApiMigrationTest.class, - BufferedReaderStreamApiMigrationTest.class, - CollectionsStreamApiMigrationTest.class, - CollectStreamApiMigrationTest.class, - ContinueStreamApiMigrationTest.class, - DistinctStreamApiMigrationTest.class, - FilterStreamApiMigrationTest.class, - FindFirstStreamApiMigrationTest.class, - FlatMapFirstStreamApiMigrationTest.class, - ForeachFirstStreamApiMigrationTest.class, - LimitStreamApiMigrationTest.class, - MinMaxStreamApiMigrationTest.class, - NoneMatchStreamApiMigrationTest.class, - OtherStreamApiMigrationTest.class, - ReductionOperationStreamApiMigrationTest.class, - SortedOperationStreamApiMigrationTest.class, - SumOperationStreamApiMigrationTest.class, - TakeWhileOperationStreamApiMigrationTest.class, - ToArrayOperationStreamApiMigrationTest.class + StreamApiMigrationInspectionTest.AllMatchStreamApiMigrationTest.class, + StreamApiMigrationInspectionTest.AnyMatchStreamApiMigrationTest.class, + StreamApiMigrationInspectionTest.BufferedReaderStreamApiMigrationTest.class, + StreamApiMigrationInspectionTest.CollectStreamApiMigrationTest.class, + StreamApiMigrationInspectionTest.ContinueStreamApiMigrationTest.class, + StreamApiMigrationInspectionTest.FilterStreamApiMigrationTest.class, + StreamApiMigrationInspectionTest.FindFirstStreamApiMigrationTest.class, + StreamApiMigrationInspectionTest.FlatMapFirstStreamApiMigrationTest.class, + StreamApiMigrationInspectionTest.ForeachFirstStreamApiMigrationTest.class, + StreamApiMigrationInspectionTest.LimitStreamApiMigrationTest.class, + StreamApiMigrationInspectionTest.MinMaxStreamApiMigrationTest.class, + StreamApiMigrationInspectionTest.NoneMatchStreamApiMigrationTest.class, + StreamApiMigrationInspectionTest.OtherStreamApiMigrationTest.class, + StreamApiMigrationInspectionTest.ReductionOperationStreamApiMigrationTest.class, + StreamApiMigrationInspectionTest.SumOperationStreamApiMigrationTest.class, + StreamApiMigrationInspectionTest.TakeWhileOperationStreamApiMigrationTest.class, }) public class StreamApiMigrationInspectionTest { + public static abstract class StreamApiMigrationInspectionBaseTest extends LightQuickFixParameterizedTestCase { + @NotNull + @Override + protected LocalInspectionTool[] configureLocalInspectionTools() { + StreamApiMigrationInspection inspection = new StreamApiMigrationInspection(); + inspection.SUGGEST_FOREACH = true; + return new LocalInspectionTool[]{ + inspection + }; + } + @Override + protected LanguageLevel getDefaultLanguageLevel() { + return LanguageLevel.JDK_1_8; + } + + public void test() throws Exception { doAllTests(); } + + abstract String getFolder(); + + @Override + protected String getBasePath() { + return "/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/" + getFolder(); + } + } + + public static class AddAllStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "addAll"; + } + } + + public static class AllMatchStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "allMatch"; + } + } + + public static class AnyMatchStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "anyMatch"; + } + } + + public static class BufferedReaderStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "bufferedReader"; + } + } + + public static class CollectStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "collect"; + } + } + + public static class ContinueStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "continue"; + } + } + + public static class FilterStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "filter"; + } + } + + public static class FindFirstStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "findFirst"; + } + } + + public static class FlatMapFirstStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "flatMap"; + } + } + + public static class ForeachFirstStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "foreach"; + } + } + + public static class LimitStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "limit"; + } + } + + public static class MinMaxStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "minMax"; + } + } + + public static class NoneMatchStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "noneMatch"; + } + } + + public static class OtherStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "other"; + } + } + + public static class ReductionOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "reduce"; + } + } + + public static class SumOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "sum"; + } + } + + public static class TakeWhileOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "takeWhile"; + } + } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AllMatchStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AllMatchStreamApiMigrationTest.java deleted file mode 100644 index 8a9474448101..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AllMatchStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class AllMatchStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "allMatch"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AnyMatchStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AnyMatchStreamApiMigrationTest.java deleted file mode 100644 index f9095677100e..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/AnyMatchStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class AnyMatchStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "anyMatch"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/BufferedReaderStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/BufferedReaderStreamApiMigrationTest.java deleted file mode 100644 index d9e7489f2af5..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/BufferedReaderStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class BufferedReaderStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "bufferedReader"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectStreamApiMigrationTest.java deleted file mode 100644 index 0e5ee2d05dfb..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class CollectStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "collect"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectionsStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectionsStreamApiMigrationTest.java deleted file mode 100644 index aa7a5bcfca21..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/CollectionsStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class CollectionsStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "collections"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ContinueStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ContinueStreamApiMigrationTest.java deleted file mode 100644 index 5d4fa9aaf09d..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ContinueStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class ContinueStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "continue"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/DistinctStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/DistinctStreamApiMigrationTest.java deleted file mode 100644 index d468810dccd4..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/DistinctStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class DistinctStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "distinct"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FilterStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FilterStreamApiMigrationTest.java deleted file mode 100644 index 0ac365989343..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FilterStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class FilterStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "filter"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FindFirstStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FindFirstStreamApiMigrationTest.java deleted file mode 100644 index 519f5afaadbb..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FindFirstStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class FindFirstStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "findFirst"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FlatMapFirstStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FlatMapFirstStreamApiMigrationTest.java deleted file mode 100644 index 1881e1f35dc1..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/FlatMapFirstStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class FlatMapFirstStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "flatMap"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ForeachFirstStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ForeachFirstStreamApiMigrationTest.java deleted file mode 100644 index d6186e1a5895..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ForeachFirstStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class ForeachFirstStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "foreach"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/LimitStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/LimitStreamApiMigrationTest.java deleted file mode 100644 index a04562580f65..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/LimitStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class LimitStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "limit"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/MinMaxStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/MinMaxStreamApiMigrationTest.java deleted file mode 100644 index 9a2d98cb49d3..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/MinMaxStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class MinMaxStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "minMax"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/NoneMatchStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/NoneMatchStreamApiMigrationTest.java deleted file mode 100644 index 5d0239a34883..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/NoneMatchStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class NoneMatchStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "noneMatch"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/OtherStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/OtherStreamApiMigrationTest.java deleted file mode 100644 index 990bcdd39b13..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/OtherStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class OtherStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "other"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ReductionOperationStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ReductionOperationStreamApiMigrationTest.java deleted file mode 100644 index 4b0b42b5b391..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ReductionOperationStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class ReductionOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "reduce"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SortedOperationStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SortedOperationStreamApiMigrationTest.java deleted file mode 100644 index a8b217beacbe..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SortedOperationStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class SortedOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "sorted"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/StreamApiMigrationInspectionBaseTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/StreamApiMigrationInspectionBaseTest.java deleted file mode 100644 index 7e6021026909..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/StreamApiMigrationInspectionBaseTest.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - -import com.intellij.codeInsight.daemon.quickFix.LightQuickFixParameterizedTestCase; -import com.intellij.codeInspection.LocalInspectionTool; -import com.intellij.codeInspection.streamMigration.StreamApiMigrationInspection; -import com.intellij.pom.java.LanguageLevel; -import org.jetbrains.annotations.NotNull; - -/** - * Created by Roman Ivanov. - */ -public abstract class StreamApiMigrationInspectionBaseTest extends LightQuickFixParameterizedTestCase { - @NotNull - @Override - protected LocalInspectionTool[] configureLocalInspectionTools() { - StreamApiMigrationInspection inspection = new StreamApiMigrationInspection(); - inspection.SUGGEST_FOREACH = true; - return new LocalInspectionTool[]{ - inspection - }; - } - - @Override - protected LanguageLevel getDefaultLanguageLevel() { - return LanguageLevel.JDK_1_8; - } - - public void test() throws Exception { doAllTests(); } - - abstract String getFolder(); - - @Override - protected String getBasePath() { - return "/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/" + getFolder(); - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SumOperationStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SumOperationStreamApiMigrationTest.java deleted file mode 100644 index aeacb294a164..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/SumOperationStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class SumOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "sum"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/TakeWhileOperationStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/TakeWhileOperationStreamApiMigrationTest.java deleted file mode 100644 index 1c72684cc98e..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/TakeWhileOperationStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class TakeWhileOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "takeWhile"; - } -} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ToArrayOperationStreamApiMigrationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ToArrayOperationStreamApiMigrationTest.java deleted file mode 100644 index 71318107db58..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/streams/ToArrayOperationStreamApiMigrationTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.java.codeInsight.daemon.quickFix.streams; - - -/** - * Created by Roman Ivanov. - */ -public class ToArrayOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { - @Override - String getFolder() { - return "toArray"; - } -} From 6c139f34d63ddcf1624902379fce7d64c491f393 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Mon, 31 Jul 2017 16:21:52 +0700 Subject: [PATCH 23/28] add comparator codegen for complex case --- .../streamMigration/FindExtremumMigration.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 5053535682eb..c54a831c78e6 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -254,19 +254,22 @@ class FindExtremumMigration extends BaseStreamApiMigration { private final @NotNull PsiExpression myExtremumKeyInitializer; private final @NotNull PsiExpression myExtremumKeyExpr; private final @NotNull TerminalBlock myTerminalBlock; + private final @Nullable PsiVariable myComparator; private ComplexExtremumTerminal(boolean max, @NotNull PsiVariable extremum, @NotNull PsiVariable extremumKey, @NotNull PsiExpression extremumKeyInitializer, @NotNull PsiExpression extremumKeyExpr, - @NotNull TerminalBlock block) { + @NotNull TerminalBlock block, + @Nullable PsiVariable comparator) { myMax = max; myExtremum = extremum; myExtremumKey = extremumKey; myExtremumKeyInitializer = extremumKeyInitializer; myExtremumKeyExpr = extremumKeyExpr; myTerminalBlock = block; + myComparator = comparator; } @@ -290,7 +293,14 @@ class FindExtremumMigration extends BaseStreamApiMigration { myTerminalBlock.add(new StreamApiMigrationInspection.FilterOp(condition, myTerminalBlock.getVariable(), false)); String lambdaText = LambdaUtil.createLambda(myTerminalBlock.getVariable(), myExtremumKeyExpr); - String comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + method + "(" + lambdaText + ")"; + String comparator; + if(myComparator == null) { + comparator = CommonClassNames.JAVA_UTIL_COMPARATOR + "." + method + "(" + lambdaText + ")"; + } else { + String comparatorName = myComparator.getName(); + if(comparatorName == null) return null; + comparator = comparatorName; + } String stream = blockWithFilter.generate() + "." + getOperation(myMax) + "(" + comparator + ").orElse(null)"; return replaceWithFindExtremum(myTerminalBlock.getMainLoop(), myExtremum, stream, myExtremumKey); } @@ -340,8 +350,8 @@ class FindExtremumMigration extends BaseStreamApiMigration { if (extremumInitializer == null || extremumKeyInitializer == null) return null; if (!ExpressionUtils.isNullLiteral(extremumInitializer)) return null; if (!ExpressionUtils.isEvaluatedAtCompileTime(extremumKeyInitializer)) return null; - return new ComplexExtremumTerminal(comparison.isMax(), extremum, extremumKey, extremumKeyInitializer, loopVarExpr, terminalBlock - ); + return new ComplexExtremumTerminal(comparison.isMax(), extremum, extremumKey, extremumKeyInitializer, loopVarExpr, terminalBlock, + comparison.getComparator()); } private static class ComplexAssignment { From 2ad0ef4b5c5adba552e9f7002362c474f260cb0d Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Mon, 31 Jul 2017 16:29:52 +0700 Subject: [PATCH 24/28] tests refactoring --- .../afterCollectionsAddAllArray.java | 0 .../afterCollectionsAddAllPrimitive.java | 0 .../afterCollectionsAddAllVarArg.java | 0 .../beforeCollectionsAddAllArray.java | 0 .../beforeCollectionsAddAllPrimitive.java | 0 .../beforeCollectionsAddAllVarArg.java | 0 .../beforeCollectionsAddAllWrongLimit.java | 0 .../StreamApiMigrationInspectionTest.java | 83 +++++++++++-------- 8 files changed, 50 insertions(+), 33 deletions(-) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{addll => addAll}/afterCollectionsAddAllArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{addll => addAll}/afterCollectionsAddAllPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{addll => addAll}/afterCollectionsAddAllVarArg.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{addll => addAll}/beforeCollectionsAddAllArray.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{addll => addAll}/beforeCollectionsAddAllPrimitive.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{addll => addAll}/beforeCollectionsAddAllVarArg.java (100%) rename java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/{addll => addAll}/beforeCollectionsAddAllWrongLimit.java (100%) diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/afterCollectionsAddAllArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addAll/afterCollectionsAddAllArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/afterCollectionsAddAllArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addAll/afterCollectionsAddAllArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/afterCollectionsAddAllPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addAll/afterCollectionsAddAllPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/afterCollectionsAddAllPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addAll/afterCollectionsAddAllPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/afterCollectionsAddAllVarArg.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addAll/afterCollectionsAddAllVarArg.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/afterCollectionsAddAllVarArg.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addAll/afterCollectionsAddAllVarArg.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/beforeCollectionsAddAllArray.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addAll/beforeCollectionsAddAllArray.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/beforeCollectionsAddAllArray.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addAll/beforeCollectionsAddAllArray.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/beforeCollectionsAddAllPrimitive.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addAll/beforeCollectionsAddAllPrimitive.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/beforeCollectionsAddAllPrimitive.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addAll/beforeCollectionsAddAllPrimitive.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/beforeCollectionsAddAllVarArg.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addAll/beforeCollectionsAddAllVarArg.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/beforeCollectionsAddAllVarArg.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addAll/beforeCollectionsAddAllVarArg.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/beforeCollectionsAddAllWrongLimit.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addAll/beforeCollectionsAddAllWrongLimit.java similarity index 100% rename from java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addll/beforeCollectionsAddAllWrongLimit.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/addAll/beforeCollectionsAddAllWrongLimit.java diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/StreamApiMigrationInspectionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/StreamApiMigrationInspectionTest.java index ca2c51ec615e..f13ba1b840bd 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/StreamApiMigrationInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/StreamApiMigrationInspectionTest.java @@ -26,22 +26,25 @@ import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ - StreamApiMigrationInspectionTest.AllMatchStreamApiMigrationTest.class, - StreamApiMigrationInspectionTest.AnyMatchStreamApiMigrationTest.class, - StreamApiMigrationInspectionTest.BufferedReaderStreamApiMigrationTest.class, - StreamApiMigrationInspectionTest.CollectStreamApiMigrationTest.class, - StreamApiMigrationInspectionTest.ContinueStreamApiMigrationTest.class, - StreamApiMigrationInspectionTest.FilterStreamApiMigrationTest.class, - StreamApiMigrationInspectionTest.FindFirstStreamApiMigrationTest.class, - StreamApiMigrationInspectionTest.FlatMapFirstStreamApiMigrationTest.class, - StreamApiMigrationInspectionTest.ForeachFirstStreamApiMigrationTest.class, - StreamApiMigrationInspectionTest.LimitStreamApiMigrationTest.class, - StreamApiMigrationInspectionTest.MinMaxStreamApiMigrationTest.class, - StreamApiMigrationInspectionTest.NoneMatchStreamApiMigrationTest.class, - StreamApiMigrationInspectionTest.OtherStreamApiMigrationTest.class, - StreamApiMigrationInspectionTest.ReductionOperationStreamApiMigrationTest.class, - StreamApiMigrationInspectionTest.SumOperationStreamApiMigrationTest.class, - StreamApiMigrationInspectionTest.TakeWhileOperationStreamApiMigrationTest.class, + StreamApiMigrationInspectionTest.AddAllTest.class, + StreamApiMigrationInspectionTest.AfterAllActionsTest.class, + StreamApiMigrationInspectionTest.AllMatchTest.class, + StreamApiMigrationInspectionTest.AnyMatchTest.class, + StreamApiMigrationInspectionTest.BufferedReaderTest.class, + StreamApiMigrationInspectionTest.CollectTest.class, + StreamApiMigrationInspectionTest.ContinueTest.class, + StreamApiMigrationInspectionTest.CountTest.class, + StreamApiMigrationInspectionTest.FilterTest.class, + StreamApiMigrationInspectionTest.FindFirstTest.class, + StreamApiMigrationInspectionTest.FlatMapFirstTest.class, + StreamApiMigrationInspectionTest.ForeachFirstTest.class, + StreamApiMigrationInspectionTest.LimitTest.class, + StreamApiMigrationInspectionTest.MinMaxTest.class, + StreamApiMigrationInspectionTest.NoneMatchTest.class, + StreamApiMigrationInspectionTest.OtherTest.class, + StreamApiMigrationInspectionTest.ReductionTest.class, + StreamApiMigrationInspectionTest.SumTest.class, + StreamApiMigrationInspectionTest.TakeWhileTest.class, }) public class StreamApiMigrationInspectionTest { public static abstract class StreamApiMigrationInspectionBaseTest extends LightQuickFixParameterizedTestCase { @@ -70,119 +73,133 @@ public class StreamApiMigrationInspectionTest { } } - public static class AddAllStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class AddAllTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "addAll"; } } - public static class AllMatchStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class AfterAllActionsTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "afterAllActions"; + } + } + + public static class AllMatchTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "allMatch"; } } - public static class AnyMatchStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class AnyMatchTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "anyMatch"; } } - public static class BufferedReaderStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class BufferedReaderTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "bufferedReader"; } } - public static class CollectStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class CollectTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "collect"; } } - public static class ContinueStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class ContinueTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "continue"; } } - public static class FilterStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class CountTest extends StreamApiMigrationInspectionBaseTest { + @Override + String getFolder() { + return "count"; + } + } + + public static class FilterTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "filter"; } } - public static class FindFirstStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class FindFirstTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "findFirst"; } } - public static class FlatMapFirstStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class FlatMapFirstTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "flatMap"; } } - public static class ForeachFirstStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class ForeachFirstTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "foreach"; } } - public static class LimitStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class LimitTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "limit"; } } - public static class MinMaxStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class MinMaxTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "minMax"; } } - public static class NoneMatchStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class NoneMatchTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "noneMatch"; } } - public static class OtherStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class OtherTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "other"; } } - public static class ReductionOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class ReductionTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "reduce"; } } - public static class SumOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class SumTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "sum"; } } - public static class TakeWhileOperationStreamApiMigrationTest extends StreamApiMigrationInspectionBaseTest { + public static class TakeWhileTest extends StreamApiMigrationInspectionBaseTest { @Override String getFolder() { return "takeWhile"; From 6d232f970ea0fec40b4737904fc645026dbec658 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Tue, 1 Aug 2017 10:31:30 +0700 Subject: [PATCH 25/28] fix notes from review: IDEA-CR-23237 --- .../FindExtremumMigration.java | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index c54a831c78e6..a2b2e9fcc9f2 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -30,6 +30,7 @@ import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.util.List; import static com.intellij.psi.util.PsiUtil.skipParenthesizedExprDown; @@ -47,7 +48,7 @@ class FindExtremumMigration extends BaseStreamApiMigration { @Override PsiElement migrate(@NotNull Project project, @NotNull PsiStatement body, @NotNull TerminalBlock tb) { - ExtremumTerminal terminal = extract(tb, null); + ExtremumTerminal terminal = extract(tb, Collections.emptyList()); if (terminal == null) return null; return terminal.replace(); } @@ -75,15 +76,14 @@ class FindExtremumMigration extends BaseStreamApiMigration { else if (type.equals(PsiType.LONG)) { return isMax ? Long.MIN_VALUE : Long.MAX_VALUE; } + else if (type.equals(PsiType.DOUBLE)) { + return isMax ? Double.MIN_VALUE : Double.MAX_VALUE; + } return null; } - /** - * @param nonFinalVariables list of non final variables used in terminal block. If null checks are omitted (intended to be null when - * quick fix applied), empty array means that no non final variables are present in block and have different semantics - */ @Nullable - static ExtremumTerminal extract(@NotNull TerminalBlock terminalBlock, @Nullable List nonFinalVariables) { + static ExtremumTerminal extract(@NotNull TerminalBlock terminalBlock, @NotNull List nonFinalVariables) { PsiStatement[] statements = terminalBlock.getStatements(); StreamApiMigrationInspection.FilterOp filterOp = terminalBlock.getLastOperation(StreamApiMigrationInspection.FilterOp.class); if (filterOp != null) { @@ -210,15 +210,7 @@ class FindExtremumMigration extends BaseStreamApiMigration { } private static boolean hasKnownComparableType(@NotNull Comparison comparison, @Nullable PsiType type) { - if (!comparison.isExternalComparison()) { - if (type == null || !(type.equals(PsiType.INT) || - type.equals(PsiType.LONG) || - type.equals(PsiType.DOUBLE) || - InheritanceUtil.isInheritor(type, CommonClassNames.JAVA_LANG_COMPARABLE))) { - return false; - } - } - return true; + return comparison.isExternalComparison() && type != null && getComparingMethod(type) != null; } interface ExtremumTerminal { @@ -230,6 +222,14 @@ class FindExtremumMigration extends BaseStreamApiMigration { @FunctionalInterface interface Extractor { + /** + * @param nullCheckExpr expression where supposed to be null check + * @param comparisonExpr expression where supposed to be comparison + * @param statements statements inside loop that should contain assignment + * @param terminalBlock terminal block for this loop + * @param nonFinalVars list of non final variables used in this loop (without terminal block variable) + * @param isNegated whether the comparison is negated + */ @Nullable ExtremumTerminal extractOriented(@NotNull PsiExpression nullCheckExpr, @NotNull PsiExpression comparisonExpr, @@ -285,8 +285,6 @@ class FindExtremumMigration extends BaseStreamApiMigration { PsiLoopStatement loop = myTerminalBlock.getMainLoop(); PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(loop.getProject()); String extremumInitializer = myExtremumKeyInitializer.getText(); - String name = myTerminalBlock.getVariable().getName(); - if (name == null) return null; PsiExpression condition = elementFactory.createExpressionFromText(myExtremumKeyExpr.getText() + inFilterOperation + extremumInitializer, loop); TerminalBlock blockWithFilter = @@ -494,7 +492,7 @@ class FindExtremumMigration extends BaseStreamApiMigration { @Nullable List nonFinalVariables, boolean isNegated) { Comparison comparison = Comparison.extract(condition, terminalBlock.getVariable(), isNegated); - if (comparison == null) return null; + if (comparison == null || comparison.isExternalComparison()) return null; if (statements.length != 1) return null; PsiAssignmentExpression assignment = ExpressionUtils.getAssignment(statements[0]); if (assignment == null) return null; From 210cf7aac9f8102af1dae8e32d21c6031e551395 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Tue, 1 Aug 2017 12:51:02 +0700 Subject: [PATCH 26/28] rollback some changes: IDEA-CR-23237 --- .../streamMigration/FindExtremumMigration.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index a2b2e9fcc9f2..0b59c4f3b438 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -30,7 +30,6 @@ import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Collections; import java.util.List; import static com.intellij.psi.util.PsiUtil.skipParenthesizedExprDown; @@ -48,7 +47,7 @@ class FindExtremumMigration extends BaseStreamApiMigration { @Override PsiElement migrate(@NotNull Project project, @NotNull PsiStatement body, @NotNull TerminalBlock tb) { - ExtremumTerminal terminal = extract(tb, Collections.emptyList()); + ExtremumTerminal terminal = extract(tb, null); if (terminal == null) return null; return terminal.replace(); } @@ -82,8 +81,12 @@ class FindExtremumMigration extends BaseStreamApiMigration { return null; } + /** + * @param nonFinalVariables list of non final variables used in terminal block. If null checks are omitted (intended to be null when + * quick fix applied), empty array means that no non final variables are present in block and have different semantics + */ @Nullable - static ExtremumTerminal extract(@NotNull TerminalBlock terminalBlock, @NotNull List nonFinalVariables) { + static ExtremumTerminal extract(@NotNull TerminalBlock terminalBlock, @Nullable List nonFinalVariables) { PsiStatement[] statements = terminalBlock.getStatements(); StreamApiMigrationInspection.FilterOp filterOp = terminalBlock.getLastOperation(StreamApiMigrationInspection.FilterOp.class); if (filterOp != null) { @@ -210,7 +213,7 @@ class FindExtremumMigration extends BaseStreamApiMigration { } private static boolean hasKnownComparableType(@NotNull Comparison comparison, @Nullable PsiType type) { - return comparison.isExternalComparison() && type != null && getComparingMethod(type) != null; + return comparison.isExternalComparison() || (type != null && getComparingMethod(type) != null); } interface ExtremumTerminal { From b1c0eecbd349248da31ba9d0a55bc871798ab975 Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Tue, 1 Aug 2017 13:01:18 +0700 Subject: [PATCH 27/28] minor, remove duplicate: IDEA-CR-23237 --- .../streamMigration/FindExtremumMigration.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 0b59c4f3b438..0b8784609f07 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -196,9 +196,10 @@ class FindExtremumMigration extends BaseStreamApiMigration { PsiExpression nakedExpression = skipParenthesizedExprDown(expression); PsiReferenceExpression referenceExpression = tryCast(nakedExpression, PsiReferenceExpression.class); if (referenceExpression == null) return null; - PsiLocalVariable localVariable = tryCast(referenceExpression.resolve(), PsiLocalVariable.class); + PsiElement resolvedExpr = referenceExpression.resolve(); + PsiLocalVariable localVariable = tryCast(resolvedExpr, PsiLocalVariable.class); if (localVariable != null) return localVariable; - return tryCast(referenceExpression.resolve(), PsiParameter.class); + return tryCast(resolvedExpr, PsiParameter.class); } private static boolean equalShape(@NotNull PsiExpression first, From cbd6d1cde8f261dcc3e90e8ad095103e127166ac Mon Sep 17 00:00:00 2001 From: Roman Ivanov Date: Tue, 1 Aug 2017 16:55:57 +0700 Subject: [PATCH 28/28] correct boxing handling: IDEA-CR-23237 --- .../FindExtremumMigration.java | 25 +++++++++++++------ .../minMax/afterMinPrimitiveBoxing.java | 9 +++++++ .../minMax/beforeMinPrimitiveBoxing.java | 16 ++++++++++++ 3 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveBoxing.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveBoxing.java diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java index 0b8784609f07..cdc46ab0e98a 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/FindExtremumMigration.java @@ -451,7 +451,8 @@ class FindExtremumMigration extends BaseStreamApiMigration { @Nullable @Override public PsiElement replace() { - String name = myTerminalBlock.getVariable().getName(); + PsiVariable variable = myTerminalBlock.getVariable(); + String name = variable.getName(); if (name == null) return null; PsiType type = myExtremumInitializer.getType(); if (type == null) return null; @@ -459,26 +460,36 @@ class FindExtremumMigration extends BaseStreamApiMigration { if (initializerValue == null) return null; TerminalBlock blockWithMap = myTerminalBlock - .add(new StreamApiMigrationInspection.MapOp(myLoopVarExpression, myTerminalBlock.getVariable(), myLoopVarExpression.getType())); + .add(new StreamApiMigrationInspection.MapOp(myLoopVarExpression, variable, myLoopVarExpression.getType())); + + final TerminalBlock terminalBlock; + PsiType variableType = variable.getType(); + if(!variableType.equals(myExtremum.getType())) { + PsiElementFactory factory = JavaPsiFacade.getElementFactory(variable.getProject()); + PsiExpression variableExpr = factory.createExpressionFromText(name, variable); + terminalBlock = blockWithMap.add(new StreamApiMigrationInspection.MapOp(variableExpr, variable, type)); + } else { + terminalBlock = blockWithMap; + } String inFilterOperation = myMax ? ">=" : "<="; - PsiLoopStatement loop = blockWithMap.getMainLoop(); + PsiLoopStatement loop = terminalBlock.getMainLoop(); PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(loop.getProject()); String extremumInitializer = myExtremumInitializer.getText(); Object nonFilterableInitialValue = getNonFilterableInitialValue(type, myMax); - final TerminalBlock terminalBlock; + final TerminalBlock filteredTerminalBlock; if (nonFilterableInitialValue != null && !nonFilterableInitialValue.equals(initializerValue)) { PsiExpression condition = elementFactory.createExpressionFromText(name + inFilterOperation + extremumInitializer, loop); - terminalBlock = blockWithMap.add(new StreamApiMigrationInspection.FilterOp(condition, myTerminalBlock.getVariable(), false)); + filteredTerminalBlock = terminalBlock.add(new StreamApiMigrationInspection.FilterOp(condition, myTerminalBlock.getVariable(), false)); } else { - terminalBlock = blockWithMap; + filteredTerminalBlock = terminalBlock; } - String stream = terminalBlock.generate() + "." + getOperation(myMax) + "().orElse(" + extremumInitializer + ")"; + String stream = filteredTerminalBlock.generate() + "." + getOperation(myMax) + "().orElse(" + extremumInitializer + ")"; return replaceWithFindExtremum(loop, myExtremum, stream, null); } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveBoxing.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveBoxing.java new file mode 100644 index 000000000000..2700306629e5 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/afterMinPrimitiveBoxing.java @@ -0,0 +1,9 @@ +// "Replace with min()" "true" + +import java.util.*; + +public class Main { + public void work(Integer[] ints) { + int min = Arrays.stream(ints).filter(anInt -> anInt < 10).mapToInt(anInt -> anInt).filter(anInt -> anInt <= 0).min().orElse(0); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveBoxing.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveBoxing.java new file mode 100644 index 000000000000..9aca5b1a2c00 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/streamApiMigration/minMax/beforeMinPrimitiveBoxing.java @@ -0,0 +1,16 @@ +// "Replace with min()" "true" + +import java.util.*; + +public class Main { + public void work(Integer[] ints) { + int min = 0; + for (Integer anInt : ints) { + if(anInt < 10) { + if(min > anInt) { + min = anInt; + } + } + } + } +} \ No newline at end of file