diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/inline/InlineLocalHandler.java b/java/java-impl-refactorings/src/com/intellij/refactoring/inline/InlineLocalHandler.java index 7612c072cbac..c263df942838 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/inline/InlineLocalHandler.java +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/inline/InlineLocalHandler.java @@ -374,6 +374,8 @@ public final class InlineLocalHandler extends JavaInlineActionHandler { final SmartPointerManager pointerManager = SmartPointerManager.getInstance(project); for (PsiElement element : refsToInline) { PsiJavaCodeReferenceElement refElement = (PsiJavaCodeReferenceElement)element; + // Erroneous method call which is resolved to a local variable: simply skip it, otherwise we may create incorrect PSI + if (refElement.getParent() instanceof PsiMethodCallExpression) continue; pointers.add(pointerManager.createSmartPsiElementPointer(InlineUtil.inlineVariable(local, defToInline, refElement))); } return pointers; diff --git a/java/java-tests/testData/refactoring/inlineLocal/LambdaInitialization.java b/java/java-tests/testData/refactoring/inlineLocal/LambdaInitialization.java new file mode 100644 index 000000000000..691c9a0c5270 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/LambdaInitialization.java @@ -0,0 +1,8 @@ +public class LambdaInitialization { + Runnable foo() { + Runnable s = () -> { + s(); + }; + return s; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineLocal/LambdaInitialization.java.after b/java/java-tests/testData/refactoring/inlineLocal/LambdaInitialization.java.after new file mode 100644 index 000000000000..ca649168c22f --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineLocal/LambdaInitialization.java.after @@ -0,0 +1,7 @@ +public class LambdaInitialization { + Runnable foo() { + return () -> { + s(); + }; + } +} \ No newline at end of file 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 110b053286e3..1c64fcd7fe0d 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 @@ -356,6 +356,8 @@ public class InlineLocalTest extends LightJavaCodeInsightTestCase { public void testCompositeAssignment() { doTest(); } public void testCompositeAssignmentCast() { doTest(); } + + public void testLambdaInitialization() { doTest(); } private void doTest(String conflictMessage) { try {