From 2c5beb00d0084603cf18123483d177fb5d05416d Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 12 Sep 2012 15:59:02 +0400 Subject: [PATCH] IDEA-91421 --- .../refactoring/inline/InlineLocalHandler.java | 15 ++++++++++----- .../LocalVarInsideLambdaBodyWriteUsage.java | 10 ++++++++++ .../refactoring/inline/InlineLocalTest.java | 5 +++++ 3 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBodyWriteUsage.java 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);