From 3766febf2ef152d1ae03d43d43600cb696a43939 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 26 Jun 2017 13:41:40 +0300 Subject: [PATCH] inline local: fix for outer lambda + nested lambda/class (IDEA-174979) --- .../intellij/refactoring/inline/InlineLocalHandler.java | 2 +- .../inlineLocal/LocalInsideLambdaWithNestedLambda.java | 8 ++++++++ .../LocalInsideLambdaWithNestedLambda.java.after | 7 +++++++ .../intellij/java/refactoring/inline/InlineLocalTest.java | 4 ++++ 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/inlineLocal/LocalInsideLambdaWithNestedLambda.java create mode 100644 java/java-tests/testData/refactoring/inlineLocal/LocalInsideLambdaWithNestedLambda.java.after 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 2cc761060360..46c0f4317c38 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineLocalHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineLocalHandler.java @@ -84,7 +84,7 @@ public class InlineLocalHandler extends JavaInlineActionHandler { final List innerClassesWithUsages = Collections.synchronizedList(new ArrayList()); final List innerClassUsages = Collections.synchronizedList(new ArrayList()); - final PsiClass containingClass = PsiTreeUtil.getParentOfType(local, PsiClass.class); + final PsiElement containingClass = PsiTreeUtil.getParentOfType(local, PsiClass.class, PsiLambdaExpression.class); final Query query = ReferencesSearch.search(local); if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(() -> { if (query.findFirst() == null){ diff --git a/java/java-tests/testData/refactoring/inlineLocal/LocalInsideLambdaWithNestedLambda.java b/java/java-tests/testData/refactoring/inlineLocal/LocalInsideLambdaWithNestedLambda.java new file mode 100644 index 000000000000..29b85da28cfc --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/LocalInsideLambdaWithNestedLambda.java @@ -0,0 +1,8 @@ +class Foo { + void foo(String s) { + Runnable r = () -> { + String s2 = s.toString(); + Runnable r2 = () -> System.out.println(s2); + }; + } +} diff --git a/java/java-tests/testData/refactoring/inlineLocal/LocalInsideLambdaWithNestedLambda.java.after b/java/java-tests/testData/refactoring/inlineLocal/LocalInsideLambdaWithNestedLambda.java.after new file mode 100644 index 000000000000..339e8ae836a7 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/LocalInsideLambdaWithNestedLambda.java.after @@ -0,0 +1,7 @@ +class Foo { + void foo(String s) { + Runnable r = () -> { + Runnable r2 = () -> System.out.println(s.toString()); + }; + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineLocalTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineLocalTest.java index 249efdb60fc0..7a12cc4768fd 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineLocalTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/inline/InlineLocalTest.java @@ -301,6 +301,10 @@ public class InlineLocalTest extends LightCodeInsightTestCase { doTest(false); } + public void testLocalInsideLambdaWithNestedLambda() throws Exception { + doTest(true); + } + private void doTest(final boolean inlineDef, String conflictMessage) throws Exception { try { doTest(inlineDef);