From 9574fa7a6e429e79bfa843607c7b709a89080f80 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Tue, 14 Mar 2017 11:57:24 +0100 Subject: [PATCH] inline: don't check containing method call if inline to method reference --- .../com/intellij/refactoring/util/InlineUtil.java | 2 +- .../MethodReferenceInsideMethodCall.java | 14 ++++++++++++++ .../MethodReferenceInsideMethodCall.java.after | 10 ++++++++++ .../refactoring/inline/InlineMethodTest.java | 4 ++++ 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/inlineMethod/MethodReferenceInsideMethodCall.java create mode 100644 java/java-tests/testData/refactoring/inlineMethod/MethodReferenceInsideMethodCall.java.after diff --git a/java/java-impl/src/com/intellij/refactoring/util/InlineUtil.java b/java/java-impl/src/com/intellij/refactoring/util/InlineUtil.java index 7c1944875894..abd56fb9f8eb 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/InlineUtil.java +++ b/java/java-impl/src/com/intellij/refactoring/util/InlineUtil.java @@ -27,7 +27,6 @@ import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.util.PsiTypesUtil; import com.intellij.psi.util.RedundantCastUtil; import com.intellij.refactoring.RefactoringBundle; import com.intellij.util.IncorrectOperationException; @@ -297,6 +296,7 @@ public class InlineUtil { public static TailCallType getTailCallType(@NotNull final PsiReference psiReference) { PsiElement element = psiReference.getElement(); + if (element instanceof PsiMethodReferenceExpression) return TailCallType.None; PsiExpression methodCall = PsiTreeUtil.getParentOfType(element, PsiMethodCallExpression.class); if (methodCall == null) return TailCallType.None; if (methodCall.getParent() instanceof PsiReturnStatement) return TailCallType.Return; diff --git a/java/java-tests/testData/refactoring/inlineMethod/MethodReferenceInsideMethodCall.java b/java/java-tests/testData/refactoring/inlineMethod/MethodReferenceInsideMethodCall.java new file mode 100644 index 000000000000..f7ca89bc32cf --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/MethodReferenceInsideMethodCall.java @@ -0,0 +1,14 @@ + +import java.util.function.Supplier; +class Foo { + + static int m() { + return 1; + } + + void o(){ + mm(Foo::m); + } + + void mm(Supplier r) {} +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineMethod/MethodReferenceInsideMethodCall.java.after b/java/java-tests/testData/refactoring/inlineMethod/MethodReferenceInsideMethodCall.java.after new file mode 100644 index 000000000000..7d486f81f40a --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/MethodReferenceInsideMethodCall.java.after @@ -0,0 +1,10 @@ + +import java.util.function.Supplier; +class Foo { + + void o(){ + mm(() -> 1); + } + + void mm(Supplier r) {} +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java index a0aa03ef047a..548defabee18 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineMethodTest.java @@ -231,6 +231,10 @@ public class InlineMethodTest extends LightRefactoringTestCase { doTestConflict("Inline cannot be applied to multiline method in constructor call"); } + public void testMethodReferenceInsideMethodCall() throws Exception { + doTest(); + } + private void doTestConflict(final String conflict) throws Exception { try { doTest();