From a6fc7fb32e9aff6696ff28d2b9fe088516c85ac4 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 29 Oct 2018 12:45:06 +0100 Subject: [PATCH] allow change signature propagation to the containing method (IDEA-201205) --- .../JavaChangeSignatureUsageProcessor.java | 4 ++-- .../changeSignaturePropagation/ParamWithLambda.java | 11 +++++++++++ .../ParamWithLambda.java.after | 11 +++++++++++ .../refactoring/ChangeSignaturePropagationTest.java | 4 ++++ .../GrChangeSignatureUsageProcessor.java | 2 +- 5 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithLambda.java create mode 100644 java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithLambda.java.after diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java index 4d5f41da1508..01c27fb2f903 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java @@ -281,7 +281,7 @@ public class JavaChangeSignatureUsageProcessor implements ChangeSignatureUsagePr } } - final PsiMethod caller = RefactoringUtil.getEnclosingMethod(ref); + final PsiMethod caller = PsiTreeUtil.getParentOfType(ref, PsiMethod.class); if (toChangeArguments) { final PsiExpressionList list = RefactoringUtil.getArgumentListByMethodReference(ref); LOG.assertTrue(list != null); @@ -654,7 +654,7 @@ public class JavaChangeSignatureUsageProcessor implements ChangeSignatureUsagePr if (methodCallUsageInfo.isToChangeArguments()){ final PsiElement element = methodCallUsageInfo.getElement(); if (element == null) continue; - final PsiMethod caller = RefactoringUtil.getEnclosingMethod(element); + final PsiMethod caller = PsiTreeUtil.getParentOfType(element, PsiMethod.class); final boolean needDefaultValue = needDefaultValue(changeInfo, caller); if (needDefaultValue && (caller == null || !MethodSignatureUtil.isSuperMethod(methodCallUsageInfo.getReferencedMethod(), caller))) { final ParameterInfo[] parameters = changeInfo.getNewParameters(); diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithLambda.java b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithLambda.java new file mode 100644 index 000000000000..b83771393808 --- /dev/null +++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithLambda.java @@ -0,0 +1,11 @@ +class ChangeSignatureTest { + private static void level1() { + Runnable runnable = () -> level2(); + Runnable runnable1 = () -> { level2();}; + level2(); + } + + private static void level2() { + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithLambda.java.after b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithLambda.java.after new file mode 100644 index 000000000000..16523f962f5a --- /dev/null +++ b/java/java-tests/testData/refactoring/changeSignaturePropagation/ParamWithLambda.java.after @@ -0,0 +1,11 @@ +class ChangeSignatureTest { + private static void level1(Class clazz) { + Runnable runnable = () -> level2(clazz); + Runnable runnable1 = () -> { level2(clazz);}; + level2(clazz); + } + + private static void level2(Class clazz) { + + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/ChangeSignaturePropagationTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/ChangeSignaturePropagationTest.java index 0da0762d9979..12903c393859 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/ChangeSignaturePropagationTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/ChangeSignaturePropagationTest.java @@ -48,6 +48,10 @@ public class ChangeSignaturePropagationTest extends LightRefactoringTestCase { parameterPropagationTest(); } + public void testParamWithLambda() { + parameterPropagationTest(); + } + public void testParamTypeSubst() { final PsiMethod method = getPrimaryMethod(); final HashSet methods = new HashSet<>(); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureUsageProcessor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureUsageProcessor.java index e37af783b227..7ee4cce28a94 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureUsageProcessor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureUsageProcessor.java @@ -129,7 +129,7 @@ public class GrChangeSignatureUsageProcessor implements ChangeSignatureUsageProc if (methodCallUsageInfo.isToChangeArguments()){ final PsiElement element = methodCallUsageInfo.getElement(); if (element == null) continue; - final PsiMethod caller = RefactoringUtil.getEnclosingMethod(element); + final PsiMethod caller = PsiTreeUtil.getParentOfType(element, PsiMethod.class); final boolean needDefaultValue = !((JavaChangeInfo)changeInfo).getMethodsToPropagateParameters().contains(caller); final PsiMethod referencedMethod = methodCallUsageInfo.getReferencedMethod(); if (needDefaultValue &&