diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/MergeFilterChainAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/MergeFilterChainAction.java index dc4238aad1b5..4bcd324dd78f 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/MergeFilterChainAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/MergeFilterChainAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2016 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. @@ -28,6 +28,7 @@ import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.InheritanceUtil; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; +import com.siyeh.ig.psiutils.ParenthesesUtils; import org.jetbrains.annotations.NotNull; import java.util.Collection; @@ -139,7 +140,9 @@ public class MergeFilterChainAction extends PsiElementBaseIntentionAction { final PsiExpression compoundExpression = JavaPsiFacade.getElementFactory(project) - .createExpressionFromText(targetBody.getText() + " && " + sourceLambdaBody.getText(), sourceLambda); + .createExpressionFromText( + ParenthesesUtils.getText((PsiExpression)targetBody, ParenthesesUtils.OR_PRECEDENCE) + " && " + + ParenthesesUtils.getText((PsiExpression)sourceLambdaBody, ParenthesesUtils.OR_PRECEDENCE), sourceLambda); targetBody = targetBody.replace(compoundExpression); CodeStyleManager.getInstance(project).reformat(targetBody); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mergeFilter/afterOr.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mergeFilter/afterOr.java new file mode 100644 index 000000000000..c0f5133dddba --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mergeFilter/afterOr.java @@ -0,0 +1,8 @@ +// "Merge filter's chain" "true" + +import java.util.stream.Stream; +class Test { + void foo(Stream stringStream ) { + stringStream.filter(name -> (name.startsWith("A") || name.startsWith("B")) && (name.length() > 3 || name.length() == 1)).findAny(); + } +} diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mergeFilter/beforeOr.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mergeFilter/beforeOr.java new file mode 100644 index 000000000000..9f4aa1046c4d --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/mergeFilter/beforeOr.java @@ -0,0 +1,9 @@ +// "Merge filter's chain" "true" + +import java.util.stream.Stream; +class Test { + void foo(Stream stringStream ) { + stringStream.filter(name -> name.startsWith("A") || name.startsWith("B")) + .filter(a -> a.length() > 3 || a.length() == 1).findAny(); + } +}