diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineLocalHandler.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineLocalHandler.java index 91f642fc6546..5acb2793ca8c 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineLocalHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineLocalHandler.java @@ -95,11 +95,16 @@ public class InlineLocalHandler extends JavaInlineActionHandler { while (innerClass != containingClass && innerClass != null) { final PsiClass parentPsiClass = PsiTreeUtil.getParentOfType(innerClass, PsiClass.class, true); if (parentPsiClass == containingClass) { - if (innerClass instanceof PsiLambdaExpression && PsiTreeUtil.isAncestor(innerClass, local, false)) { - innerClassesWithUsages.add(((PsiLambdaExpression)innerClass).getBody()); - } else { - innerClassesWithUsages.add(innerClass); - } + if (innerClass instanceof PsiLambdaExpression) { + if (PsiTreeUtil.isAncestor(innerClass, local, false)) { + innerClassesWithUsages.add(((PsiLambdaExpression)innerClass).getBody()); + } else { + innerClassesWithUsages.add(innerClass); + } + innerClass = parentPsiClass; + continue; + } + innerClassesWithUsages.add(innerClass); innerClassUsages.add(element); } innerClass = parentPsiClass; diff --git a/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBodyWriteUsage.java b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBodyWriteUsage.java new file mode 100644 index 000000000000..1590aa542843 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBodyWriteUsage.java @@ -0,0 +1,10 @@ +class Test { + { + Runnable x = () -> { + int hello = 9; + System.out.println(hello); + ++hello; + System.out.println(hello); + }; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineLocalTest.java b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineLocalTest.java index 0b1c432113e1..f6ded4007a4e 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineLocalTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineLocalTest.java @@ -162,6 +162,11 @@ public class InlineLocalTest extends LightCodeInsightTestCase { doTest(true); } + public void testLocalVarInsideLambdaBodyWriteUsage() throws Exception { + doTest(true, "Cannot perform refactoring.\n" + + "Variable 'hello' is accessed for writing."); + } + private void doTest(final boolean inlineDef, String conflictMessage) throws Exception { try { doTest(inlineDef);