diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterExpressionProcessor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterExpressionProcessor.java index 81c5b6985ea0..5046a30fb94f 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterExpressionProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterExpressionProcessor.java @@ -342,7 +342,15 @@ public class InlineParameterExpressionProcessor extends BaseRefactoringProcessor myConflicts.putValue(expression, "Parameter initializer depends on value which is not available inside method"); } } else if (element instanceof PsiParameter) { - myConflicts.putValue(expression, "Parameter initializer depends on callers parameter"); + boolean bound = false; + for (PsiParameter parameter : myMethod.getParameterList().getParameters()) { + if (parameter.getType().equals(((PsiParameter)element).getType()) && parameter.getName().equals(((PsiParameter)element).getName())) { + bound = true; + } + } + if (!bound) { + myConflicts.putValue(expression, "Parameter initializer depends on callers parameter"); + } } } diff --git a/java/java-tests/testData/refactoring/inlineParameter/PropagatedParams.java b/java/java-tests/testData/refactoring/inlineParameter/PropagatedParams.java new file mode 100644 index 000000000000..e554bf2683f1 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineParameter/PropagatedParams.java @@ -0,0 +1,10 @@ +class X { + void bar(String str){ + foo(str, str.substring(0)); + } + + void foo(String str, String str1) { + System.out.println(str); + System.out.println(str1); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineParameter/PropagatedParams.java.after b/java/java-tests/testData/refactoring/inlineParameter/PropagatedParams.java.after new file mode 100644 index 000000000000..354e5378b7bc --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineParameter/PropagatedParams.java.after @@ -0,0 +1,10 @@ +class X { + void bar(String str){ + foo(str); + } + + void foo(String str) { + System.out.println(str); + System.out.println(str.substring(0)); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineParameterTest.java b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineParameterTest.java index b49a306ccedd..64327636836e 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineParameterTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineParameterTest.java @@ -138,6 +138,10 @@ public class InlineParameterTest extends LightRefactoringTestCase { doTest(false); } + public void testPropagatedParams() throws Exception { + doTest(false); + } + public void testParameterWithWriteAccess() throws Exception { try { doTest(false);