From 9ddff21a9c31fb97af352845228bf1fed1fe9a75 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 11 Sep 2012 20:51:28 +0400 Subject: [PATCH] inline inside lambda body (IDEA-91371) --- .../inline/InlineLocalHandler.java | 6 ++++- .../LocalVarInsideLambdaBody1.java | 24 +++++++++++++++++++ .../LocalVarInsideLambdaBody1.java.after | 23 ++++++++++++++++++ .../refactoring/inline/InlineLocalTest.java | 4 ++++ 4 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody1.java create mode 100644 java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody1.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 75f9a4d40575..91f642fc6546 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineLocalHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineLocalHandler.java @@ -95,7 +95,11 @@ public class InlineLocalHandler extends JavaInlineActionHandler { while (innerClass != containingClass && innerClass != null) { final PsiClass parentPsiClass = PsiTreeUtil.getParentOfType(innerClass, PsiClass.class, true); if (parentPsiClass == containingClass) { - innerClassesWithUsages.add(innerClass); + if (innerClass instanceof PsiLambdaExpression && PsiTreeUtil.isAncestor(innerClass, local, false)) { + innerClassesWithUsages.add(((PsiLambdaExpression)innerClass).getBody()); + } else { + innerClassesWithUsages.add(innerClass); + } innerClassUsages.add(element); } innerClass = parentPsiClass; diff --git a/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody1.java b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody1.java new file mode 100644 index 000000000000..46c97bd3ab76 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody1.java @@ -0,0 +1,24 @@ +/* + * Copyright 2000-2012 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +public class Test2 { + { + Runnable r = () -> { + final String p = "hello"; + System.out.println(p); + }; + } +} + diff --git a/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody1.java.after b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody1.java.after new file mode 100644 index 000000000000..66ef507a8a08 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/LocalVarInsideLambdaBody1.java.after @@ -0,0 +1,23 @@ +/* + * Copyright 2000-2012 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +public class Test2 { + { + Runnable r = () -> { + System.out.println("hello"); + }; + } +} + 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 45103653238f..0b1c432113e1 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineLocalTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineLocalTest.java @@ -158,6 +158,10 @@ public class InlineLocalTest extends LightCodeInsightTestCase { doTest(true); } + public void testLocalVarInsideLambdaBody1() throws Exception { + doTest(true); + } + private void doTest(final boolean inlineDef, String conflictMessage) throws Exception { try { doTest(inlineDef);