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 6d5b5fc74c82..7d053c658700 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/BaseStreamApiMigration.java @@ -115,13 +115,6 @@ abstract class BaseStreamApiMigration { return buffer; } - static String getIteratedValueText(PsiExpression iteratedValue) { - return iteratedValue instanceof PsiCallExpression || - iteratedValue instanceof PsiReferenceExpression || - iteratedValue instanceof PsiQualifiedExpression || - iteratedValue instanceof PsiParenthesizedExpression ? iteratedValue.getText() : "(" + iteratedValue.getText() + ")"; - } - static void removeLoop(@NotNull PsiLoopStatement statement) { PsiElement parent = statement.getParent(); if (parent instanceof PsiLabeledStatement) { diff --git a/java/java-impl/src/com/intellij/codeInspection/streamMigration/CollectMigration.java b/java/java-impl/src/com/intellij/codeInspection/streamMigration/CollectMigration.java index f857490dd4be..427a5dacb447 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/CollectMigration.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/CollectMigration.java @@ -167,9 +167,9 @@ class CollectMigration extends BaseStreamApiMigration { if (iteratedValue == null) return null; PsiExpression qualifierExpression = call.getMethodExpression().getQualifierExpression(); String qualifierText = qualifierExpression != null ? qualifierExpression.getText() : ""; - String collectionText = - iteratedValue.getType() instanceof PsiArrayType ? CommonClassNames.JAVA_UTIL_ARRAYS + ".asList(" + iteratedValue.getText() + ")" : - getIteratedValueText(iteratedValue); + String collectionText = iteratedValue.getType() instanceof PsiArrayType + ? CommonClassNames.JAVA_UTIL_ARRAYS + ".asList(" + iteratedValue.getText() + ")" + : iteratedValue.getText(); String callText = StringUtil.getQualifiedName(qualifierText, "addAll(" + collectionText + ");"); return loopStatement.replace(factory.createStatementFromText(callText, loopStatement)); } 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 2a3bc89cd99f..2a97b338523c 100644 --- a/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/streamMigration/StreamApiMigrationInspection.java @@ -643,14 +643,8 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo catch (AnalysisCanceledException ignored) { return null; } - int startOffset = tb.getStartOffset(controlFlow); - int endOffset = tb.getEndOffset(controlFlow); - if(startOffset < 0 || endOffset < 0) return null; - final Collection exitPoints = ControlFlowUtil - .findExitPointsAndStatements(controlFlow, startOffset, endOffset, new IntArrayList(), PsiContinueStatement.class, - PsiBreakStatement.class, PsiReturnStatement.class, PsiThrowStatement.class); - startOffset = controlFlow.getStartOffset(body); - endOffset = controlFlow.getEndOffset(body); + int startOffset = controlFlow.getStartOffset(body); + int endOffset = controlFlow.getEndOffset(body); if(startOffset < 0 || endOffset < 0) return null; PsiElement surrounder = PsiTreeUtil.getParentOfType(loop, PsiLambdaExpression.class, PsiClass.class); final List nonFinalVariables = StreamEx.of(ControlFlowUtil.getUsedVariables(controlFlow, startOffset, endOffset)) @@ -671,6 +665,8 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo if (isCollectMapCall(loop, tb) && nonFinalVariables.isEmpty() && (REPLACE_TRIVIAL_FOREACH || tb.hasOperations())) { return new CollectMigration("collect"); } + Collection exitPoints = tb.findExitPoints(controlFlow); + if (exitPoints == null) return null; // do not replace for(T e : arr) {} with Arrays.stream(arr).forEach(e -> {}) even if flag is set if (SUGGEST_FOREACH && exitPoints.isEmpty() && nonFinalVariables.isEmpty() && (tb.hasOperations() || @@ -1383,12 +1379,13 @@ public class StreamApiMigrationInspection extends BaseJavaBatchLocalInspectionTo myPreviousOp = previousOp; } - int getStartOffset(ControlFlow cf) { - return cf.getStartOffset(myStatements[0]); - } - - int getEndOffset(ControlFlow cf) { - return cf.getEndOffset(myStatements[myStatements.length-1]); + Collection findExitPoints(ControlFlow controlFlow) { + int startOffset = controlFlow.getStartOffset(myStatements[0]); + int endOffset = controlFlow.getEndOffset(myStatements[myStatements.length - 1]); + if (startOffset < 0 || endOffset < 0) return null; + return ControlFlowUtil + .findExitPointsAndStatements(controlFlow, startOffset, endOffset, new IntArrayList(), PsiContinueStatement.class, + PsiBreakStatement.class, PsiReturnStatement.class, PsiThrowStatement.class); } PsiStatement getSingleStatement() {