diff --git a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java index 59493b2af0a6..ea277471b81a 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java +++ b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java @@ -56,7 +56,6 @@ import com.intellij.refactoring.introduceVariable.IntroduceVariableBase; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.HashMap; import com.intellij.util.containers.HashSet; -import com.siyeh.ipp.types.ExpandOneLineLambda2CodeBlockIntention; import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -263,6 +262,7 @@ public class RefactoringUtil { if (parent == null) parent = place; while (true) { if (isExpressionAnchorElement(parent)) return parent; + if (parent instanceof PsiExpression && parent.getParent() instanceof PsiLambdaExpression) return parent; parent = parent.getParent(); if (parent == null) return null; } diff --git a/java/java-tests/testData/refactoring/introduceVariable/PutInLambdaBodyMultipleOccurrences.after.java b/java/java-tests/testData/refactoring/introduceVariable/PutInLambdaBodyMultipleOccurrences.after.java new file mode 100644 index 000000000000..08a1dfc04531 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/PutInLambdaBodyMultipleOccurrences.after.java @@ -0,0 +1,17 @@ +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +class X { + public void foo(Class cls) + { + Stream.of(cls.getMethods()) + .filter(method -> { + Class c = method.getReturnType(); + return Collection.class.isAssignableFrom(c) || Map.class.isAssignableFrom(c); + }) + .collect(Collectors.toList()); + } +} diff --git a/java/java-tests/testData/refactoring/introduceVariable/PutInLambdaBodyMultipleOccurrences.java b/java/java-tests/testData/refactoring/introduceVariable/PutInLambdaBodyMultipleOccurrences.java new file mode 100644 index 000000000000..4643cf18f806 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/PutInLambdaBodyMultipleOccurrences.java @@ -0,0 +1,15 @@ +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +class X { + public void foo(Class cls) + { + Stream.of(cls.getMethods()) + .filter(method -> + Collection.class.isAssignableFrom(method.getReturnType()) || Map.class.isAssignableFrom(method.getReturnType())) + .collect(Collectors.toList()); + } +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java index d883e8d68ad4..eceac23f1c6c 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java @@ -476,6 +476,10 @@ public class IntroduceVariableTest extends LightCodeInsightTestCase { doTest(new MockIntroduceVariableHandler("c", false, false, false, "int")); } + public void testPutInLambdaBodyMultipleOccurrences() { + doTest(new MockIntroduceVariableHandler("c", true, false, false, "java.lang.Class")); + } + public void testPutInLambdaBodyVoidValueConflict() { doTest(new MockIntroduceVariableHandler("c", false, false, false, "int")); }